【问题标题】:PDO Prepared statement not returning recordsPDO 准备好的语句不返回记录
【发布时间】:2014-08-04 10:07:12
【问题描述】:

我能够使用带有 ODBC 驱动程序的 PDO 连接到我的 DB2 数据库。我能够运行查询并获得结果,但准备好的语句什么也不返回(没有错误)。

这段代码:

$pdo = new PDO("odbc:thingy","user","password");
$stmt = $pdo->prepare("SELECT * FROM PROD.JMA3REP WHERE A3ANCD = 'DH 33-00'");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
dd ($rows);

返回一条记录。完美。

这段代码:

$pdo = new PDO("odbc:thingy","user","password");
$stmt = $pdo->prepare("SELECT * FROM PROD.JMA3REP WHERE A3ANCD = ?");
$stmt->execute(array('DH 33-00'));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
dd ($rows);

返回一个空数组。

我也尝试过使用命名参数 (...where A3ANCD=:id),但也没有用。

我试过摆弄所有 PDO 属性,但没有任何运气。

代码在其他 ODBC 设置上运行良好 - 混合使用 unixODBC、DB2 和 PDO 会发生什么巫术来阻止此查询运行?以及如何打败它以使其屈服?

【问题讨论】:

  • id ? - 这是什么?
  • 我在清理字段名称以使其可读时出现拼写错误。现已修复。
  • 好吧,改正所有其他错别字,你就可以搞定了。
  • @hjpotter92 从学习PDO开始PLEASE
  • ...如果它在配置中,那么我怀疑我们是否有足够的信息来帮助您 - 即,您为配置的其余部分设置了什么?您的第一个示例查询仍然包含一个错字(显然返回结果的那个) - 您没有结束撇号/单引号。如果您尝试通过对这两个查询执行UNION 来获取两行(并且只为其中一个查询提供参数),会发生什么?还是加入什么的?

标签: pdo db2 odbc prepared-statement


【解决方案1】:

所以看来 64 位 linux 架构上的 pdo_odbc 有问题,我不是第一个遇到这个问题的人:

https://stackoverflow.com/a/18535989/1676

解决方案似乎是使用 32 位 odbc 驱动程序。

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2011-01-08
    • 1970-01-01
    • 2014-09-15
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多