Tôi đang gặp sự cố với tuyên bố đã chuẩn bị PDO và rowCount trả lại số hàng bị ảnh hưởng không chính xác.Hàng PDOCount không trả lại số hàng bị ảnh hưởng chính xác
Tôi có một cơ sở dữ liệu thử nghiệm đơn giản của:
create table test (
boolean var1;
);
Sau đó, tôi đã mã kiểm tra sau:
$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");
$sth->execute(array(':val' => true));
echo $sth->rowCount();
nào trả về như mong đợi: 1 rows affected
Và khi tôi chèn loại không hợp lệ và Chèn không thành công:
$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");
$sth->execute(array(':val' => 20));
echo $sth->rowCount();
nào trả về như mong đợi: 0 rows affected
Tuy nhiên, Khi tôi có nhiều chèn -
$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");
$sth->execute(array(':val' => true));
echo $sth->rowCount() . ", ";
$sth->execute(array(':val' => 20));
echo $sth->rowCount();
Kết quả trong: 1, 1
Và nếu tôi lật trật tự thực hiện tôi nhận được : 0, 1
Tại sao rowCount() - hàng bị ảnh hưởng không được thiết lập để không trên một tuyên bố thất bại sau một succe ss tuyên bố?
Tôi đang chạy php 5.3.6-13 và PostgreSQL 9.1
Chỉ cần bật ngoại lệ đối với PDO và nhận được một cách tốt hơn xử lý các trường hợp như vậy – zerkms
Điều này có ý nghĩa với tôi vì bạn đã sử dụng lại cùng một PDOStatement. Nếu bạn cần một rowCount riêng cho mỗi câu lệnh, thì hãy chuẩn bị câu lệnh thứ hai. – Ozzy