0

私が今MySQL関数で抱えている単純な問題があります。MySQLテーブルを実行して、そのテーブルから別のテーブルにデータを移動しようとしています。1つのテーブルは「users」と列「user_id」です。whileループを実行して、テーブルusersのすべての行をループし、テーブル'new_users'に新しい行を作成しようとしています。これが私のコードです:

$sql = "SELECT * FROM users";
$result = $mysqli->query($sql);

while($row = mysqli_fetch_array($result)){
$sql_create_new = "INSERT INTO new_users (user_id) VALUES ('$row[user_id]')";
$result_create_new = $mysqli->query($sql_create_new);
echo $row['user_id']."<br />";
}

テーブルusersのuser_idのすべての値が正しくエコーされるので、ループが実行されていることがわかります。ただし、テーブルnew_usersを確認すると、1つの行(最初の行)しかなく、実際には他の値が追加されていません。簡単なものが欠けていると思います。ご協力いただきありがとうございます!

4

1 に答える 1

2

これはコメントでも言及されていましたが、単純さがいかに重要であるかを強調することはできません。

$mysqli->query('INSERT INTO new_users (user_id) SELECT user_id FROM users');

宛先テーブルに既に存在するレコードとの競合を防ぐには、INSERT IGNORE INTOまたはを使用しますREPLACE INTO

それ以外の場合は、準備済みステートメントを適切に使用する必要があります。

$create_new_stmt = $mysqli->prepare('INSERT INTO new_users (user_id) VALUES (?)');

while ($row = $result->fetch_array()) {
    $create_new_stmt->bind_param('i', $row['user_id']);
    $create_new_stmt->execute();
    echo $row['user_id']."<br />";
}
于 2013-02-25T07:30:40.923 に答える