Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';t以下PDO交易获胜';你不能用PHP吗?_Php_Mysql_Pdo_Transactions_Innodb - Fatal编程技术网

为什么赢了';t以下PDO交易获胜';你不能用PHP吗?

为什么赢了';t以下PDO交易获胜';你不能用PHP吗?,php,mysql,pdo,transactions,innodb,Php,Mysql,Pdo,Transactions,Innodb,我使用的是PHP版本5.4.4,以及使用InnoDB的MySQL数据库。我已经使用PDO有一段时间了,没有使用事务,而且一切工作都完美无缺。然后,我决定尝试实现事务,并且不断得到内部服务器错误500。以下代码适用于我(不包含事务) 然后,我尝试将事务与以下代码一起使用(这不起作用) 当我运行前面的代码时,我得到一个内部服务器错误500 任何帮助都将不胜感激!谢谢 $DB->beginTransaction返回一个布尔值,它不会返回您的数据库处理程序(如在准备好的语句对象中) 改用$dbh=$DB

我使用的是PHP版本5.4.4,以及使用InnoDB的MySQL数据库。我已经使用PDO有一段时间了,没有使用事务,而且一切工作都完美无缺。然后,我决定尝试实现事务,并且不断得到内部服务器错误500。以下代码适用于我(不包含事务)

然后,我尝试将事务与以下代码一起使用(这不起作用)

当我运行前面的代码时,我得到一个内部服务器错误500


任何帮助都将不胜感激!谢谢

$DB->beginTransaction
返回一个
布尔值
,它不会返回您的数据库处理程序(如在准备好的语句对象中)


改用
$dbh=$DB->prepare
。您可以使用返回值
$DB->beginTransaction
检查事务是否成功启动(它将关闭自动提交模式)。

您需要引用数据库连接句柄,而不是beginTransaction方法的返回值。您正在将返回值指定给$dbh$胸径是不需要的。您需要改用$DB变量,然后在PDO语句周围声明beginTransaction/commit

//start transaction, reference PDO handle
$DB->beginTransaction();

//In between your beginTransaction and Commit is where you will put all of your
// statements.
$DB->prepare(...);
$DB->bindValue(...);

$DB->execute();

//commit your statements once done.
$DB->commit();

启用了什么版本的MySQL和事务?我有一个托管ISP,它有正确的MySQL版本,但由于某些原因禁用了事务。请检查您的错误日志。错误是什么?
beginTransaction
返回一个
布尔值
,它不会返回您的数据库处理程序。。改用
$dbh=$DB->prepare
。。所以,真的是越来越讨厌所有的人下来投票职位,但不告诉为什么..@dbf非常感谢!这解决了我的问题!我为这个天真的问题道歉。我对PHP编程和PDO相当陌生。@jfizz我将发表我的评论,作为您接受率的答案;)噢,哇,投了反对票,想谈谈你的问题吗?
try {
    $DB = new PDO('mysql:host=localhost;dbname=database', 'root', 'root');
    $DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $dbh = $DB->beginTransaction();

    $dbh->prepare("SELECT * FROM user WHERE username = :test");

    $dbh->bindValue(':test', $test, PDO::PARAM_STR);

    $dbh->execute();

    $dbh->commit();
}
catch(Exception $e) {
    $dbh->rollback();
    echo "an error has occured";
}
//start transaction, reference PDO handle
$DB->beginTransaction();

//In between your beginTransaction and Commit is where you will put all of your
// statements.
$DB->prepare(...);
$DB->bindValue(...);

$DB->execute();

//commit your statements once done.
$DB->commit();