データベース操作にPHPのMySQLI拡張機能を使用する場合、挿入されたばかりのデータの自動成長IDを取得することは、一般的な要件です。特に、プリプロセシングステートメント( MySQLI_STMT )を使用して挿入操作を実行した後、挿入レコードの自動インクリメントプライマリキー値を正しく取得することが特に重要です。この記事では、 mysqli_stmt :: $ insert_id属性を介してこの値を正確に取得する方法を詳細に紹介します。
MySQLデータベースの一部のテーブルフィールド(通常はプライマリキー)を自動的に成長させるように設定できます(Auto_increment)。データベースは、新しいレコードが挿入されるたびに新しい一意のIDを自動的に生成します。プログラム端末は、後続の操作(更新、関連性など)を容易にするために、このIDを知る必要があります。
一般に、SQL注射のリスクを回避するために、前処理ステートメントが推奨されます。データを挿入するためのサンプルコードは次のとおりです。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$username = "alice";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "正常に挿入します!";
} else {
echo "挿入障害: " . $stmt->error;
}
?>
この例では、前処理ステートメントを介して新しいユーザーデータを安全に挿入します。
MySqli_Stmtオブジェクトには$ insert_idプロパティがあり、最後の挿入操作によって生成された自動成長IDを取得するために使用できます。取得方法は次のとおりです。
<?php
$insert_id = $stmt->insert_id;
echo "挿入するだけですIDはい: " . $insert_id;
?>
このプロパティは、挿入操作が実行され、テーブルに自動成長フィールドがある場合にのみ理にかなっていることに注意してください。
これは、mysqli_stmt :: $ insert_idで新しく挿入されたIDを取得する方法を示す完全な例を示します。
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
if (!$stmt) {
die("前処理に失敗しました: " . $mysqli->error);
}
$username = "bob";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
$insert_id = $stmt->insert_id;
echo "正常に挿入します!新しいレコードIDはい: " . $insert_id;
} else {
echo "挿入障害: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
Auto_incrementを設定するフィールドがテーブルにあることを確認してください。そうしないと、 $ insert_idが0に戻ります。
execute ()が実行されるたびに、 $ insert_idは現在挿入されているIDに更新されます。
複数のレコードがバッチに挿入されている場合、最初のレコードの自己侵入IDのみを取得でき、後続のIDは挿入の数に基づいて計算する必要があります。
また、 $ mysqli-> insert_id (ステートメントが実行されるmysqli接続オブジェクトで)で取得することもできますが、コンテキストが一貫していることを確認するために$ stmt-> insert_idを使用することをお勧めします。
mysqli_stmt :: $ insert_idを使用して、最新の挿入操作によって生成された自動成長IDを簡単かつ正確に取得します。前処理ステートメントを組み合わせると、データセキュリティとコードの規範性が向上する可能性があります。このプロパティを適切に使用すると、データベース操作の一貫したロジックとデータの整合性を実現するのに役立ちます。