我正在将旧的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查询失败。

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

有帮助吗?

解决方案

object  
true  
ERROR: getClientInfo query failed.

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

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top