當前位置: 首頁> 最新文章列表> 如何使用PDOStatement::rowCount 判斷INSERT 是否成功

如何使用PDOStatement::rowCount 判斷INSERT 是否成功

gitbox 2025-05-28

在PHP 中使用PDO (PHP Data Objects) 進行數據庫操作時, PDOStatement::rowCount()方法可以用來獲取受SQL 語句影響的行數。對於INSERT操作,我們通常希望通過rowCount()來判斷插入是否成功。

什麼是PDOStatement::rowCount

PDOStatement::rowCount()是一個PDO 提供的方法,用於返回最後執行的SQL 語句所影響的行數。對於INSERT語句來說,它返回受該操作影響的行數,通常情況下, INSERT成功會影響到1 行(如果是單條插入)。

 <?php
// 連接到數據庫
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");

// 插入數據
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);

$name = 'John Doe';
$email = '[email protected]';

$stmt->execute();

// 使用 rowCount() 判斷是否插入成功
if ($stmt->rowCount() > 0) {
    echo "數據插入成功!";
} else {
    echo "數據插入失敗!";
}
?>

如何判斷INSERT是否成功?

在使用PDO執行INSERT語句後,我們可以通過rowCount()來判斷數據是否被成功插入。一般來說, INSERT語句執行成功時,返回的行數應該是1,即影響了1 行數據。如果返回0,可能是由於SQL 語句沒有被正確執行或沒有數據被插入。

不過,要注意的是, PDOStatement::rowCount()可能不會在某些數據庫驅動中返回準確的行數,特別是在使用某些MySQL 存儲引擎時。例如,使用InnoDB存儲引擎時, rowCount()可能不會返回預期的結果,尤其是在執行批量插入時。

處理批量插入時如何判斷成功?

對於批量插入操作, rowCount()的返回值可能並不是單一的1。比如,如果我們插入了多條記錄,它返回的值將是插入成功的記錄數。

 <?php
// 批量插入示例
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");

$data = [
    ['name' => 'Alice', 'email' => '[email protected]'],
    ['name' => 'Bob', 'email' => '[email protected]'],
    ['name' => 'Charlie', 'email' => '[email protected]']
];

foreach ($data as $user) {
    $stmt->bindParam(':name', $user['name']);
    $stmt->bindParam(':email', $user['email']);
    $stmt->execute();
}

// 判斷插入的行數
if ($stmt->rowCount() === count($data)) {
    echo "所有數據插入成功!";
} else {
    echo "數據插入失敗!";
}
?>

在這個示例中,我們通過rowCount()判斷插入的記錄數是否與期望的數量一致。如果一致,則說明所有數據都成功插入。

使用lastInsertId()獲取插入的ID

雖然rowCount()可以判斷插入是否成功,但如果我們需要獲取新插入記錄的ID,應該使用PDO::lastInsertId()方法。 lastInsertId()返回最後插入數據表的自增ID,這對於需要插入並返回該記錄ID 的操作非常有用。

 <?php
// 插入數據并獲取最後插入的 ID
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);

$name = 'David';
$email = '[email protected]';

$stmt->execute();

// 獲取最後插入的 ID
$lastInsertId = $pdo->lastInsertId();
echo "最後插入的 ID 是:$lastInsertId";
?>

通過lastInsertId()可以確保我們能夠得到新記錄的ID,尤其在需要進一步操作插入數據時(如與其他表建立關聯)非常有用。

小結

  1. PDOStatement::rowCount()用於獲取SQL 語句執行後影響的行數。

  2. 對於INSERT語句, rowCount()返回插入的行數,通常是1 行,表示插入成功。

  3. 批量插入時, rowCount()會返回實際插入的記錄數。

  4. 如果需要獲取插入記錄的ID,應使用PDO::lastInsertId()方法。

通過正確使用rowCount()lastInsertId() ,你可以更加靈活地處理數據庫操作,確保數據插入的正確性與完整性。