【问题标题】:PDO query problemPDO查询问题
【发布时间】:2010-09-29 04:18:16
【问题描述】:

我正在将一些代码从旧的 mysql_* 函数更新到 PDO。它连接没有问题,运行查询没有问题,但结果集是空的。 PDO::query() 应该返回一个 PDOStatement 对象,但我得到的回报是真实的。未报告任何错误。

这是我的代码:


try
{
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass");
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo");
    $stmt->execute();
}catch(PDOException $e)
{
    echo $e->getMessage() . "\n";
}


echo gettype($stmt) . "\n";
if ($stmt) echo "true\n";
else echo "false\n";

$resultset = $stmt->fetchAll();

if(empty($resultset))
{
    exit("ERROR: getClientInfo query failed.");
}

$DB = null;

print_r($resultset);

我看到的输出是:

对象 真的 错误:getClientInfo 查询失败。

任何想法为什么它没有返回任何结果?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:
    object  
    true  
    ERROR: getClientInfo query failed.
    

    在我看来,您的 PDOStatement $stmt 变量实际上被报告为对象,而不是“true”。然后代码在看到$stmt 不为空时打印“true”,因为它是一个对象。

    我建议您检查来自$stmt->execute() 的返回值。您可能遇到 SQL 错误。例如,如果您拼错了表名,或者您连接的数据库“dbname”中不存在该表,或者您登录的用户没有权限查询该表。

    还可以查看$stmt->errorInfo() 以获取有关发生的任何错误的更多详细信息。

    【讨论】:

      【解决方案2】:

      我有点尴尬地报告说我指向了错误的 DSN。我想这就是我在跨年夜外出后仅仅几个小时的睡眠就尝试学习新东西的结果。感谢 PDOStatement::errorInfo() 方法的提示,我之前没有注意到。

      【讨论】:

      • 没问题。只睡几个小时,就很难做好任何事——除了睡觉!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2010-10-09
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      相关资源
      最近更新 更多