0

PHP から MySQL テーブルに行を挿入し、挿入直後にクエリを実行して、挿入されたばかりの行のキー値を次のように取得しています。

$stmt = $this->db->prepare("INSERT INTO user(vFirstName, vLastName, vEmail, vPassword, iSkilllevelid, vTournaments, vDays, dAddedDate, eStatus) VALUES (?,?,?,?,4,'Pick-Up','Saturday',NOW(),'Active')");
$stmt->bind_param("ssss", $firstName, $lastName, $email, $pwd);
$stmt->execute();
$stmt->close();

$stmt = $this->db->prepare('SELECT iUserId FROM user WHERE vEmail=?');
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($iUserId);
while ($stmt->fetch()) {
    break;
}

このコードの実行後$iUserId、正しい自動インクリメント キー値 (たとえば 1143) がありますが、実際にデータベース テーブルを見ると、そのキー (1143) を持つ行は存在しません。そんなことがあるものか??

4

1 に答える 1

2

挿入後にテーブルから選択する代わりに、次を使用する必要がありますmysqli::$insert_id

$stmt = $this->db->prepare('
  INSERT INTO user
    (vFirstName, vLastName, vEmail, vPassword, iSkilllevelid,
       vTournaments, vDays, dAddedDate, eStatus)
  VALUES
    (?,?,?,?,4,"Pick-Up","Saturday",NOW(),"Active")
');
$stmt->bind_param('ssss', $firstName, $lastName, $email, $pwd);
$stmt->execute();
$iUserId = $this->db->insert_id;
$stmt->close();

挿入されたデータが他の接続から表示されない理由については、トランザクションがコミットされていない可能性があります。

$this->db->commit();
于 2013-01-20T18:58:16.930 に答える