5

以下是我的查询

 $db= new mysqli('localhost','user','passcode','dbname');
try {
// First of all, let's begin a transaction
$db->beginTransaction();

// A set of queries; if one fails, an exception should be thrown
$query1="insert into table1(id,name) values('1','Dan')";
$query2="insert into table2(id,name) values('2','Anaba')";

// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();

} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$db->rollback();
}

请我尝试通过 php 在 mysql 查询中实现事务,当其中一个查询失败时,我想使所有查询失败。上面的代码抛出错误(“Fatal error: Call to undefined method mysqli::beginTransaction()”)。请问有没有更好的解决方案或想法来解决这个问题。感谢您的帮助

4

3 回答 3

10
$db->begin_transaction();

不是

$db->beginTransaction();

http://www.php.net/manual/en/mysqli.begin-transaction.php

如果早于 PHP 5.5,则使用

$db->autocommit(true);

反而

于 2013-07-12T22:35:29.237 回答
2

根据文档,begin_transaction()是 PHP 5.5 中的新功能。(几周前刚刚发布)

如果您收到错误消息说它不存在,这可能意味着您使用的是旧版本的 PHP。

如果您认为您正在运行 PHP 5.5,请通过在同一脚本中运行此代码来验证您的 PHP 版本:

echo(phpversion());

有时,一台机器上存在多个 PHP 版本,而您的脚本实际上可能并未以您认为的版本执行。

于 2013-07-12T23:15:46.223 回答
0

你可以实现一个 $count,像这样:

$err_count = 0;
$query1 = "insert into table1(id,name) values('1','Dan')";
if(!$query1) 
    $err_count++;

if($err_count>0) 
    throw new Exception("error msg");
于 2013-07-12T22:45:04.593 回答