Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

INSERINDO valores de uma tabela em outra tabela


Em primeiro lugar, nunca use SELECT * em algum código:ele vai morder você (ou quem tiver que manter este aplicativo) se a estrutura da tabela mudar (nunca diga nunca).

Você pode considerar usar um INSERT que obtém seus valores de um SELECT diretamente:
"INSERT INTO admin(userID, forename, ..., `password`, ...)
    SELECT userID, forename, ..., `password`, ...
    FROM jobseeker WHERE userID = ..."

Você não precisa ir via PHP para fazer isso.

(Desculpas por usar um exemplo acima que dependia de mysql_real_escape_string em uma versão anterior desta resposta. Usando mysql_real_escape_string não é uma boa ideia , embora provavelmente seja um pouco melhor do que colocar o parâmetro diretamente na string de consulta.)

Não tenho certeza de qual mecanismo MySQL você está usando, mas você deve considerar fazer essas instruções em uma única transação também (você precisaria do InnoDB em vez do MyISAM).

Além disso, sugiro usar mysqli e declarações preparadas para poder vincular parâmetros:esta é uma maneira muito mais limpa de não ter que escapar dos valores de entrada (para evitar ataques de injeção de SQL).

EDIÇÃO 2:

(Você pode querer desativar as aspas mágicas se elas estiverem ativadas.)
$userID = $_GET['userID'];

// Put the right connection parameters
$mysqli = new mysqli("localhost", "user", "password", "db");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

// Use InnoDB for your MySQL DB for this, not MyISAM.
$mysqli->autocommit(FALSE);

$query = "INSERT INTO admin(`userID`, `forename`, `surname`, `salt`, `password`, `profilePicture`)"
    ." SELECT `userID`, `forename`, `surname`, `salt`, `password`, `profilePicture` "
    ." FROM jobseeker WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$query = "UPDATE user SET userType = 'admin' WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$query = "DELETE FROM jobseeker WHERE userID=?";

if ($stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('i', (int) $userID);
    $stmt->execute();
    $stmt->close();
} else {
    die($mysqli->error);
}

$mysqli->commit();

$mysqli->close();

EDIÇÃO 3: Eu não tinha percebido seu userID era um int (mas provavelmente é isso, já que você disse que é incrementado automaticamente em um comentário):converta-o em um int e/ou não o use como uma string (ou seja, com aspas) em WHERE userID = '$userID' (mas, novamente, nunca insira sua variável diretamente em uma consulta, seja lida do banco de dados ou de um parâmetro de solicitação).