【问题标题】:PDO Prepared Statement does not UPDATE tablePDO Prepared Statement 不更新表
【发布时间】:2010-06-28 14:40:29
【问题描述】:

我正在开发一个基于 PDO 的 ORM,针对没有唯一 ID 字段的表,所以当我更新或删除时,我需要与记录的先前值进行比较,以及LIMIT 1

当我的查询最终到达数据库并使用参数执行时,一切都是正确的,正如一般查询日志所证实的那样,但是,什么都没有发生

我没有抛出异常(PDO::ERRMODE_EXCEPTION 开启),检查 $stmt->errorInfo() 恢复正常,但 $stmt->rowCount() 返回 0

作为健全性检查,我打开日志文件,将 UPDATE 查询复制并粘贴到 Sequel Pro(OSX MySQL GUI)中并执行,一切都按预期工作,更新了 1 行。

当手动执行 IDENTICAL 查询时,为什么 PDO 不更新行?

【问题讨论】:

  • 您能不能显示一下不起作用的代码?
  • @Bill:不是。我检查了。问题在于他们引用了占位符。
  • 已解决。我的代码为 WHERE 子句生成 = NULL,而它应该是 IS NULL。 MySQL(无论出于何种原因)在记录时将 = 更改为 IS,但在执行时不会。

标签: php mysql pdo


【解决方案1】:

问题是我的代码使用

生成了一个查询
WHERE `FieldName` = NULL

应该是什么时候

WHERE `FieldName` IS NULL

当由 PDO 执行时,它保留了= NULL,导致没有记录匹配,但是当 MySQL 记录它时,它记录了IS NULL,所以当我复制/粘贴时,查询是正确的并更新了行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2013-07-03
    • 2014-12-17
    • 2014-02-24
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多