帮助。我正在将旧 mysql 库中的一些代码转换为使用 PDO。
在几个地方,我们尝试进行 INSERT,完全知道重复键可能存在违规行为。这很好,我们寻找它并继续处理。所有这些都没有问题。
在一个地方,我们必须循环并添加多个项目,所以我使用了带有参数绑定的准备好的语句。如果我们在 INSERT 上没有遇到任何重复,它工作正常。但是,如果存在重复的密钥违规,则以下 PDO->execute() 会静默失败,没有异常,什么都没有。
这是我目前的代码:
<?php
$db = new PDO("mysql:host=localhost;dbname=".$dbname, $mysqluser, $mysqlpwd,
array(PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db->prepare("insert into trials (uid,name,start_date,expire_date) values (:uid,:node,FROM_UNIXTIME(:start),FROM_UNIXTIME(:end))");
$stmt->bindValue(':uid', $uid, PDO::PARAM_STR);
$stmt->bindParam(':node', $node, PDO::PARAM_STR);
$stmt->bindValue(':start', $start);
$stmt->bindValue(':end', $end);
foreach ($nodes as $node) {
if (isfreenode($node))
continue;
try {
$stmt->execute(); // <-- This is where it fails
} catch (exception $e) {
$errorInfo = $stmt->errorInfo();
if ($errorInfo[1] = 1062) {
print "Trial already exists (" . $node . ") - skipping <br/>";
} else {
throw $e;
}
$stmt->closeCursor();
continue;
}
print "Started Trial ( " . $uid . " , " . $node . " )" . "<br/>";
removeRevocation($uid, $node);
$stmt->closeCursor();
}
}
关于我可以尝试至少了解它为什么会死的任何建议?