2009-01-02 110 views
1

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

这里是我的代码:


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查询失败。

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

回答

5
object 
true 
ERROR: getClientInfo query failed. 

它看起来对我来说,你的PDOStatement $stmt变量实际上报告是一个对象,而不是“true”。当代码看到$stmt非空时,它会打印“true”,因为它是一个对象。

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

另请参阅$stmt->errorInfo()以获取有关发生的任何错误的更多详细信息。

0

我有点不好意思回报我指的是错误的DSN。我想这就是为了在除夕之后几个小时的睡眠中尝试学习新东西而得到的。感谢PDOStatement :: errorInfo()方法的提示,我之前没有注意到它。

+0

没问题。在短短几个小时的睡眠中,很难做好任何事情 - 除了睡觉! – 2009-01-02 03:37:24