为什么赢了';t以下PDO交易获胜';你不能用PHP吗?
我使用的是PHP版本5.4.4,以及使用InnoDB的MySQL数据库。我已经使用PDO有一段时间了,没有使用事务,而且一切工作都完美无缺。然后,我决定尝试实现事务,并且不断得到内部服务器错误500。以下代码适用于我(不包含事务) 然后,我尝试将事务与以下代码一起使用(这不起作用) 当我运行前面的代码时,我得到一个内部服务器错误500为什么赢了';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
任何帮助都将不胜感激!谢谢
$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();