Bạn có thể chuẩn bị nhiều số liệu thống kê trước khi thực thi chúng không?Chuẩn bị nhiều số liệu thống kê trước khi thực hiện chúng trong một giao dịch?
$db = PDO('..connection info...');
$cats_stmt = $db->prepare('SELECT * FROM cats');
$dogs_stmt = $db->prepare('SELECT * FROM dogs');
$cats_stmt->execute();
$cats = $cats_stmt->fetchAll(PDO::FETCH_CLASS);//list of cats
$dogs_stmt->execute();
$dogs = $dogs_stmt->fetchAll(PDO::FETCH_CLASS);//list of dogs
Điều này sẽ hữu ích cho các vòng có 2 câu lệnh với các biến khác nhau cần được thực thi sau mỗi lần khác. như thế này:
$stmt_addcat = $db->prepare('INSERT INTO cats (name,age) VALUES(?,?)');
$stmt_adddog = $db->prepare('INSERT INTO dogs (name,age) VALUES(?,?)');
foreach($cat_n_dog as $bunch){
$db->beginTransaction();
$dog_name = $bunch['dog']['name'];
$dog_age = $bunch['dog']['age'];
$stmt_adddog->bindParam(1,$dog_name,PDO::PARAM_STR);
$stmt_adddog->bindParam(2,$dog_age,PDO::PARAM_STR);
$result = $stmt_adddog->execute();
if($result===false){
$db->rollBack();
continue;
}
$cat_name = $bunch['cat']['name'];
$cat_age = $bunch['cat']['age'];
$stmt_addcat->bindParam(1,$cat_name,PDO::PARAM_STR);
$stmt_addcat->bindParam(2,$cat_age,PDO::PARAM_STR);
$result = $stmt_addcat->execute();
if($result===false){
$db->rollBack();
continue;
}
$db->commit();
}
Tôi hỏi vì tôi đã có những tình huống mà PDO sẽ hành động lỗi và ném lỗi trên tài xế sqlite, vì vậy tôi tự hỏi nếu ví dụ trên thậm chí còn phải làm việc.
p.s. ví dụ được thực hiện tại chỗ.
Tại sao không thử nó? –
Bạn hoàn toàn có thể sử dụng PDO theo cách bạn mô tả. Vấn đề duy nhất là bạn sử dụng 'beginTransaction()' trong câu lệnh 'foreach', đánh bại mục đích của các giao dịch nhưng tôi không biết đó là một sai lầm bạn đã thực hiện trong khi gõ ví dụ này hay là cái gì đó bạn thực sự sử dụng. –
lỗi bài ném bởi trình điều khiển pdo sqlite –