Current Location: Home> Latest Articles> How to determine whether a batch operation is successfully executed through the PDOStatement::rowCount function?

How to determine whether a batch operation is successfully executed through the PDOStatement::rowCount function?

gitbox 2025-05-28

In PHP, PDO (PHP Data Objects) provides a powerful interface for interacting with databases, which can help us perform various database operations. Batch operations refer to the execution of multiple inserts, updates, or deletes operations in a single database transaction. PDOStatement::rowCount is a method used to obtain the number of affected rows, which is usually used to determine whether a SQL query is successfully executed.

This article will introduce how to use the PDOStatement::rowCount function to determine whether a batch operation is successfully executed, and give relevant code examples.

1. The role of PDOStatement::rowCount

The PDOStatement::rowCount method returns the number of rows affected by the last SQL statement. This can be used to judge:

  • How many lines were successfully inserted during the insertion operation

  • How many lines have been modified during the update operation

  • How many rows are deleted in the delete operation

However, it should be noted that not all database drivers can return the number of affected rows accurately, especially for some SELECT queries. When performing batch operations, the return value of rowCount can help us determine whether the operation is successful.

2. Use rowCount to determine whether the batch operation is successful

In batch operations, we usually use transactions to ensure the atomicity of a set of operations. When executing multiple SQL statements, rowCount can be used to determine whether each statement is successfully executed.

Sample code:

Here is an example of using PDO to perform batch insert operations and determine whether it is successful through rowCount :

 <?php
// Database connection settings
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = 'password';

try {
    // create PDO Example
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Start a transaction
    $pdo->beginTransaction();

    // Insert data in batches
    $sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
    $stmt = $pdo->prepare($sql);

    // Assume batch data to be inserted
    $users = [
        ['name' => 'John Doe', 'email' => '[email protected]'],
        ['name' => 'Jane Doe', 'email' => '[email protected]'],
        ['name' => 'Alice', 'email' => '[email protected]']
    ];

    $success = true;
    foreach ($users as $user) {
        // Bind parameters and perform insertion operations
        $stmt->bindParam(':name', $user['name']);
        $stmt->bindParam(':email', $user['email']);
        
        if (!$stmt->execute()) {
            // If execution fails,Mark as failed
            $success = false;
            break;
        }

        // Check if data is inserted
        if ($stmt->rowCount() == 0) {
            $success = false;
            break;
        }
    }

    // Submit transactions,If the insertion is successful
    if ($success) {
        $pdo->commit();
        echo "Successful batch insertion!";
    } else {
        $pdo->rollBack();
        echo "Bulk insert failed!";
    }
} catch (PDOException $e) {
    // Transaction rollback and displays error message
    $pdo->rollBack();
    echo "Database error:" . $e->getMessage();
}
?>

Code description:

  1. Database connection : First, we use PDO to connect to the database.

  2. Transaction management : Start transactions through $pdo->beginTransaction() to ensure the atomicity of batch insert operations.

  3. Execute insertion : In the foreach loop, we insert user data one by one. Before each insert, bindParam to bind the parameters and execute SQL statements.

  4. Check the number of rows : Use the rowCount() method to check whether each insert operation affects the rows in the database. If rowCount() returns 0 , it means that no data is inserted and the operation fails.

  5. Transaction commit or rollback : If all insert operations are successful, call $pdo->commit() to commit the transaction, otherwise call $pdo->rollBack() to rollback the transaction.

3. Use rowCount to determine other batch operations

In addition to insert operations, rowCount can also be used for batch updates or delete operations. During an update or delete operation, we can judge whether the specified row has been successfully updated or deleted based on the return value of rowCount .

Example: Batch update operation

 <?php
// Database connection settings
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = 'password';

try {
    // create PDO Example
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Start a transaction
    $pdo->beginTransaction();

    // Batch update operation
    $sql = "UPDATE users SET email = :email WHERE name = :name";
    $stmt = $pdo->prepare($sql);

    // Assume the data to be updated
    $users = [
        ['name' => 'John Doe', 'email' => '[email protected]'],
        ['name' => 'Jane Doe', 'email' => '[email protected]']
    ];

    $success = true;
    foreach ($users as $user) {
        // Bind parameters and perform update operations
        $stmt->bindParam(':name', $user['name']);
        $stmt->bindParam(':email', $user['email']);
        
        if (!$stmt->execute()) {
            // If execution fails,Mark as failed
            $success = false;
            break;
        }

        // Check if the data has been updated
        if ($stmt->rowCount() == 0) {
            $success = false;
            break;
        }
    }

    // Submit transactions,If the update is successful
    if ($success) {
        $pdo->commit();
        echo "Successful batch update!";
    } else {
        $pdo->rollBack();
        echo "Bulk update failed!";
    }
} catch (PDOException $e) {
    // Transaction rollback and displays error message
    $pdo->rollBack();
    echo "Database error:" . $e->getMessage();
}
?>

4. Summary

By using the PDOStatement::rowCount function, we can easily determine whether the batch operation is successfully executed. Whether it is batch insertion, update or delete operations, we can judge whether the operation is successfully executed based on the number of rows returned by rowCount . This approach is very suitable for situations where operations need to be successful, especially when using transactions, which ensures data consistency and integrity.