【发布时间】:2011-07-20 09:01:35
【问题描述】:
我在整个网站中一直使用 PDO;但是,在更新 auditkey 表中的键时,以下(简化方法)将无法在 DB 上成功执行:
try {
$dbh = new PDO(etc...);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$currentKey = getCurrentKey(); //returns a SHA1 key
beginTransaction($dbh); // not a typo, call to a wrapper function!
$stmt = $dbh->prepare("UPDATE auditkey SET key=:nextKey");
$stmt->bindValue(':nextKey', sha1($currentKey), PDO::PARAM_STR);
$success = $stmt->execute();
$dbh->commit();
}
我得到的错误如下:
SQLSTATE[42000]:语法错误或 访问冲突:1064 你有一个 SQL 语法错误;检查 与您的 MySQL 对应的手册 正确语法的服务器版本 在附近使用 '键='f6aa38e947482563913c56c2c72a59ea623c7dfb'' 在第 1 行
当手动修改并输入 UPDATE 时,SQL 工作正常:
UPDATE `auditkey` SET `key`='f6aa38e947482563913c56c2c72a59ea623c7dfb';
【问题讨论】:
-
我最近学到的一点是,如果你的脚本中还有一个
catch函数,在你的try之后,它使用$dbh->rollback(),你必须将beginTransaction放在你的@ 之外987654327@,否则你的回滚没有回滚的意义。
标签: php transactions pdo