我有这段代码:
$this->db->beginTransaction();
$query = 'INSERT INTO `table1` VALUES (NULL,:a,:b,NULL,NOW())';
$sth = $this->db->prepare($query);
foreach ($values as $k => $v) {
$sth->bindParam(':' . $k, $v, PDO::PARAM_INT);
}
$this->executeQueryRollbackOnException($sth, 'Message_1');
$resetId = $this->db->lastInsertId();
$query = 'UPDATE `table2` SET c=:c,d=:d WHERE reset_id IS NULL';
$sth = $this->db->prepare($query);
foreach ($values2 as $k => $v) {
$sth->bindParam(':' . $k, $v, PDO::PARAM_INT);
}
$this->executeQueryRollbackOnException($sth, 'Message_2');
Zend_Debug::dump($sth->rowCount(), 'Affected'); // This is 0
// Commit
$this->db->commit();
...
private function executeQueryRollbackOnException($sth, $message) {
try {
$sth->execute();
} catch (Exception $e) {
$this->logSQLError($e);
$this->db->rollBack();
throw new Exception($message);
}
}
执行第一个查询但第二个查询不执行。没有产生mysql错误。有什么想法吗?
答案 0 :(得分:1)
我找到了解决方案。
foreach ($values as $k => $v) {
$sth->bindParam(':' . $k, $v, PDO::PARAM_INT);
}
应该是
foreach ($values as $k => $v) {
$sth->bindParam(':' . $k, $values[$k], PDO::PARAM_INT);
}
抱歉,我没有在第一时间发布正确的代码,我排除了简化代码的方法
答案 1 :(得分:0)
$sth->rowCount()
为0的事实并不意味着查询未运行。如果PHP错误日志中没有报告错误,则查询运行正常。如果行计数为0,则表示没有更新行。这很可能是由于您的条件不匹配任何行。
运行以下内容;如果你得到0,那么你知道问题是你的UPDATE
条件:
SELECT COUNT(*) FROM `table2` WHERE reset_id IS NULL