帮助。我正在从旧的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();
}
}
关于我可以尝试至少看到它为何会死的原因的任何建议?