在PHP 中,使用MySQL 數據庫時,可以通過mysqli擴展來與數據庫進行交互。當你想要執行INSERT操作並同時獲取數據庫中插入數據的自增ID 時,可以利用mysqli::stmt_init函數來實現。接下來,我們將詳細介紹如何使用mysqli::stmt_init來完成這個任務。
首先,我們需要建立一個數據庫連接。為了確保代碼的安全性,建議使用mysqli的面向對象方法來連接數據庫。以下是數據庫連接的示例代碼:
<?php
$host = 'localhost'; // 數據庫主機
$user = 'root'; // 數據庫用戶名
$password = ''; // 數據庫密碼
$dbname = 'test'; // 數據庫名
// 創建數據庫連接
$conn = new mysqli($host, $user, $password, $dbname);
// 檢查連接是否成功
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
?>
在準備執行INSERT操作時,我們需要先編寫一個SQL 語句。通過mysqli::stmt_init函數,我們可以初始化一個準備語句(prepared statement)。在以下的例子中,我們將插入一個新的用戶到users表中。
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
我們可以使用mysqli::stmt_init來初始化一個語句對象。通過該對象,我們可以綁定參數並執行查詢。
$stmt = $conn->stmt_init();
if (!$stmt->prepare($sql)) {
die("SQL 錯誤: " . $stmt->error);
}
接下來,我們需要將實際的值綁定到SQL 語句中的佔位符( ? )。使用bind_param方法來完成參數綁定。假設我們要插入的用戶名是johndoe ,郵箱是johndoe@m66.net ,可以這樣寫:
$username = 'johndoe';
$email = 'johndoe@m66.net';
// 綁定參數
$stmt->bind_param("ss", $username, $email);
在上面的代碼中, "ss"表示我們綁定了兩個字符串類型的參數。
執行INSERT操作後,MySQL 會自動為新插入的記錄生成一個自增ID。我們可以通過insert_id屬性來獲取這個ID。
if ($stmt->execute()) {
echo "新記錄插入成功。插入的 ID 為: " . $conn->insert_id;
} else {
echo "插入失敗: " . $stmt->error;
}
在這裡, $conn->insert_id將返回插入的記錄的自增ID。
執行完插入操作後,別忘了關閉語句和數據庫連接。
$stmt->close();
$conn->close();
以下是一個完整的示例代碼,展示瞭如何使用mysqli::stmt_init執行INSERT操作並獲取自增ID。
<?php
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$conn = new mysqli($host, $user, $password, $dbname);
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $conn->stmt_init();
if (!$stmt->prepare($sql)) {
die("SQL 錯誤: " . $stmt->error);
}
$username = 'johndoe';
$email = 'johndoe@m66.net';
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "新記錄插入成功。插入的 ID 為: " . $conn->insert_id;
} else {
echo "插入失敗: " . $stmt->error;
}
$stmt->close();
$conn->close();
?>