pdostatement :: rowcount()は、 PHPでPDOを使用してデータベースを操作する場合、一般的ですが、しばしば誤解される方法です。特に、更新または削除ステートメントを実行した後、それを使用して、データが「更新」されているか「削除」されているかを判断します。しかし、あなたはその背後にある行動の詳細を知っていますか?
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$sql = "UPDATE users SET status = 'active' WHERE last_login > :date";
$stmt = $pdo->prepare($sql);
$stmt->execute([':date' => '2024-01-01']);
echo "更新 " . $stmt->rowCount() . " ラインレコード";
このコードは、 rowcount()を使用して更新ステートメントを実行して、実際の行数を影響を受けるものを取得します。
dmlでのみ有効: rowcount()は、挿入、更新、削除後に影響を受ける行の数を正しく返すことができます。ただし、選択の場合、MySQLドライバーは通常0を返します。
データの変更に関連する: rowCount()は、ターゲット行データが実際に変更されない場合に0を返す場合があります(つまり、新しい値は古い値と同じです)。これは、PDOではなくMySQLの動作の問題です。
「行数」に等しくない:「実際に変化する行の数」をカウントし、「条件を満たす行の数」ではなく。
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => '[email protected]', ':id' => 1]);
if ($stmt->rowCount() > 0) {
echo "ユーザー情報が更新されました";
} else {
echo "更新なし,データが変更されていないか、 ID 存在しません";
}
RowCount()の動作をマスターすると、ビジネスロジックがより厳密になり、データベース操作が有効かどうかを誤解させることを避けることができます。その他の例については、 https://gitbox.net/docs/pdo-updateを参照してください。