我使用的是PHP 5.4.4版本,以及使用InnoDB的MySQL数据库。我一直在使用PDO而不使用交易,并且一切都完美无瑕。然后,我决定尝试实现事务,并且不断收到内部服务器错误500.以下代码适用于我(不包含事务)。为什么下面的PDO事务不能在PHP中工作?
try {
$DB = new PDO('mysql:host=localhost;dbname=database', 'root', 'root');
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh = $DB->prepare("SELECT * FROM user WHERE username = :test");
$dbh->bindValue(':test', $test, PDO::PARAM_STR);
$dbh->execute();
}
catch(Exception $e) {
$dbh->rollback();
echo "an error has occured";
}
然后我试图使用下面的代码(这是行不通的)交易。
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";
}
当我运行上面的代码中,我得到一个内部服务器错误500
任何帮助将不胜感激!谢谢!
什么版本的MySQL和事务处于启用状态?我有一个主机ISP拥有正确版本的MySQL,但由于某种原因禁用了事务。 – Revent
检查您的错误日志。什么是错误? – Ryan
'beginTransaction'返回一个'boolean',它不会返回你的数据库处理程序..使用'$ dbh = $ DB-> prepare'来代替..真的让所有的人都下来投票,但不会告诉为什么.. – dbf