【问题标题】:PDO exec returns 0 instead of rows affectedPDO exec 返回 0 而不是受影响的行
【发布时间】:2013-07-08 00:35:35
【问题描述】:

我遇到了 PDO::exec() 方法的问题。我现在想弄清楚一个小时,但仍然无处可去。这可能是我缺少的一些小东西。

我使用 exec 更新(并在另一段代码中删除)数据库中的一行。根据手册, exec 应该返回受影响的行数。但在我的情况下(更新和删除),exec 运行,物理更新数据库,但仍然返回 0。

这是我的更新语句代码(删除类似)

$data = Array(
    'title' => $entity->getTitle(),
    'subtitle' => $entity->getSubtitle(),
    'text' => $entity->getText(),
);
$response = $this->conn->exec("UPDATE entries SET ? WHERE id = ?", $data, $entity->getId());
if($response <> 1) throw new Exception('Update statement affected '.$response.' rows');

上面的代码将输出 Uncaught exception: Update statement affected 0 rows, 即使该行实际已更新。

我用异常注释了该行,一切运行正常(但我无法处理错误)。

有人可以帮忙吗?

PS.:我使用的是 Nette Framework,所以带有 ? 的查询是有效的。$entity 的内容也是有效的

【问题讨论】:

  • 这是有效的 php $response &lt;&gt; 1
  • @DevZer0 - Yes, it is.
  • @ÁlvaroG.Vicario 谢谢
  • 在手动函数原型中只显示了 1 个参数,public int PDO::exec ( string $statement ) 我没有看到它提到的任何地方,您可以使用它动态绑定参数。
  • @DevZer0 Nette 框架覆盖 exec() 以实现预处理语句功能。

标签: php pdo exec


【解决方案1】:

Pdo exec 不支持准备好的语句。因此,exec() 方法的任何行为都与 PDO 无关,而是属于您正在使用的任何框架。

【讨论】:

  • 正如 DevZer0 所说,即使使用 exec,Nette 也会执行准备好的语句。但是,返回值仍然是 false (0),它应该是 true :-(
  • 我也有同样的问题。因为,确切的声明在其他网站上运行良好,但在一个网站上显示错误。奇怪
猜你喜欢
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多