我遇到了PHP脚本中的事务问题。如果至少其中一个失败,我想进行多次查询并能够全部回忆它们。下面你可以找到脚本的一个简单的例子,我使用的:如果我删除线PHP PDO - 没有活动交易
Uncaught exception 'PDOException' with message 'There is no active transaction'
:
$tags_input = array(6,4,5);
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',
DB_USER, DB_PASSW, array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$conn->beginTransaction();
$sql = "INSERT INTO projects (id, pr_id, enabled) VALUES (:val0, :val1, :val2)";
$stmt = $conn->prepare($sql);
if(count($tags_input)>0){
for($i = 0;$i<count($tags_input);$i++){
$stmt->bindValue(':val0', 57);
$stmt->bindValue(':val1', $tags_input[$i]);
$stmt->bindValue(':val2', 'Y');
$result = $stmt->execute();
}
}
$res1 = $conn->commit();
$conn->rollBack();
现在,这个例子产生一个错误 $ conn->回滚() ; 错误消失,因此我不明白为什么pdo对象无法看到打开的事务(开始交易和提交不会产生任何错误)。我也尝试把rollBack()放入事务中,但没有任何区别。我仍然收到错误'没有活动的交易。
我在InnoDB上运行PHP 5.6和Mysql表。
您在这里commiting交易:'$ RES1 = $ conn->提交();'所以你不能回滚 – e4c5
尝试包装你的交易代码为try-catch语句,如在第一例http://php.net/manual/en/pdo.transactions.php –
https://phpdelusions.net/pdo#transactions –