sql >> Base de Datos >  >> RDS >> Mysql

INSERTAR valores de una tabla en otra tabla

En primer lugar, nunca use SELECT * en algún código:te morderá a ti (o a quien tenga que mantener esta aplicación) si la estructura de la tabla cambia (nunca digas nunca).

Podría considerar usar un INSERT que toma sus valores de un SELECT directamente:

"INSERT INTO admin(userID, forename, ..., `password`, ...)
    SELECT userID, forename, ..., `password`, ...
    FROM jobseeker WHERE userID = ..."

No tienes que usar PHP para hacer esto.

(Disculpas por usar un ejemplo anterior que se basó en mysql_real_escape_string en una versión anterior de esta respuesta. Usando mysql_real_escape_string no es una buena idea , aunque probablemente sea marginalmente mejor que poner el parámetro directamente en la cadena de consulta).

No estoy seguro de qué motor MySQL está usando, pero también debería considerar hacer esas declaraciones dentro de una sola transacción (necesitaría InnoDB en lugar de MyISAM).

Además, sugeriría usar mysqli y declaraciones preparadas para poder vincular parámetros:esta es una forma mucho más limpia de no tener que escapar de los valores de entrada (para evitar ataques de inyección SQL).

EDICIÓN 2:

(Es posible que desee desactivar las comillas mágicas si están activadas).

$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();

EDICIÓN 3: No me había dado cuenta de tu userID era un int (pero eso es probablemente lo que es, ya que dijiste que se incrementa automáticamente en un comentario):cámbialo a un int y/o no lo uses como una cadena (es decir, con comillas) en WHERE userID = '$userID' (pero nuevamente, nunca inserte su variable directamente en una consulta, ya sea que se lea desde la base de datos o un parámetro de solicitud).