當前位置: 首頁> 最新文章列表> 如何使用mysqli::stmt_init 函數執行INSERT 操作並獲取自增ID (insert_id)

如何使用mysqli::stmt_init 函數執行INSERT 操作並獲取自增ID (insert_id)

M66 2025-07-10

在PHP 中,使用MySQL 數據庫時,可以通過mysqli擴展來與數據庫進行交互。當你想要執行INSERT操作並同時獲取數據庫中插入數據的自增ID 時,可以利用mysqli::stmt_init函數來實現。接下來,我們將詳細介紹如何使用mysqli::stmt_init來完成這個任務。

步驟1: 創建數據庫連接

首先,我們需要建立一個數據庫連接。為了確保代碼的安全性,建議使用mysqli的面向對象方法來連接數據庫。以下是數據庫連接的示例代碼:

 <?php
$host = 'localhost'; // 數據庫主機
$user = 'root';      // 數據庫用戶名
$password = '';      // 數據庫密碼
$dbname = 'test';    // 數據庫名

// 創建數據庫連接
$conn = new mysqli($host, $user, $password, $dbname);

// 檢查連接是否成功
if ($conn->connect_error) {
    die("連接失敗: " . $conn->connect_error);
}
?>

步驟2: 準備SQL 語句

在準備執行INSERT操作時,我們需要先編寫一個SQL 語句。通過mysqli::stmt_init函數,我們可以初始化一個準備語句(prepared statement)。在以下的例子中,我們將插入一個新的用戶到users表中。

 $sql = "INSERT INTO users (username, email) VALUES (?, ?)";

步驟3: 初始化語句

我們可以使用mysqli::stmt_init來初始化一個語句對象。通過該對象,我們可以綁定參數並執行查詢。

 $stmt = $conn->stmt_init();
if (!$stmt->prepare($sql)) {
    die("SQL 錯誤: " . $stmt->error);
}

步驟4: 綁定參數

接下來,我們需要將實際的值綁定到SQL 語句中的佔位符( ? )。使用bind_param方法來完成參數綁定。假設我們要插入的用戶名是johndoe ,郵箱是johndoe@m66.net ,可以這樣寫:

 $username = 'johndoe';
$email = 'johndoe@m66.net';

// 綁定參數
$stmt->bind_param("ss", $username, $email);

在上面的代碼中, "ss"表示我們綁定了兩個字符串類型的參數。

步驟5: 執行SQL 語句並獲取自增ID

執行INSERT操作後,MySQL 會自動為新插入的記錄生成一個自增ID。我們可以通過insert_id屬性來獲取這個ID。

 if ($stmt->execute()) {
    echo "新記錄插入成功。插入的 ID 為: " . $conn->insert_id;
} else {
    echo "插入失敗: " . $stmt->error;
}

在這裡, $conn->insert_id將返回插入的記錄的自增ID。

步驟6: 關閉連接

執行完插入操作後,別忘了關閉語句和數據庫連接。

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