在執行它們之前準備多個語句可以嗎?在事務中執行它們之前準備多個語句?
$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
這會派上用場的地方循環語句2用不同的變量都需要經過相互執行。 這樣的:
$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();
}
我問,因爲我已經在那裏PDO將採取行動車和SQLite的駕駛員引發錯誤的情況,所以我想知道如果上面的例子中甚至應該工作。
p.s.例子是在現場製作的。
爲什麼不試試呢? –
按照您描述的方式使用PDO是完全正確的。唯一的問題是,你在'foreach'語句中使用'beginTransaction()',這違背了事務的目的,但我不知道這是你在輸入這個例子時犯的錯誤還是你實際使用的東西。 –
由pdo sqlite驅動程序引發的錯誤 –