【问题标题】:Fatal error: Call to a member function fetchAll() on a non-object in pdo致命错误:调用 pdo 中非对象上的成员函数 fetchAll()
【发布时间】:2012-09-01 05:22:31
【问题描述】:

我是 pdo 的新手,刚刚尝试了以下操作并遇到致命错误。

$pdo = new pdo('mysql:localhost;widget_corp;charset=utf-8', 'root', '');
$query = $pdo->query("SELECT * FROM 'users'");
$result_array = $query->fetchAll(PDO::FETCH_ASSOC);

【问题讨论】:

  • pdo 一定要大写吗?
  • host=localhost;dbname=widget_corp 刚刚添加了这个并且工作了。想知道原因。
  • 其实有几个问题: 1. DSN 中的dbname= 2. 检查失败的查询并使用errorCode 显示错误,你不应该使用撇号' 而是使用反引号`
  • 这应该放在地球某处的 SQL 调试书中。

标签: php pdo


【解决方案1】:

变化:

mysql:localhost;widet_corp

mysql:host=localhost;dbname=widget_corp

也在您发布的代码中:

$query = $pdo->query("SELECT * FROM 'users'");

你有单引号内的表名。在 Mysql 中,您应该对表和列使用反引号。

    $query = $pdo->query("SELECT * FROM `users`");

【讨论】:

  • host=localhost;dbname=widget_corp 刚刚添加了这个并且工作了。想知道原因。
  • @YousufIqbal 您的连接字符串需要包含某些信息,对于 mysql,这恰好是语法。不知道我还能说什么:)
【解决方案2】:

PDO::query 如果您的查询错误,则返回false

SELECT * FROM 'users'

应该是

SELECT * FROM `users`

【讨论】:

  • print_r($dbh->errorInfo()); 会显示数组的内容。
【解决方案3】:

$pdo->query() 如果查询失败,将返回 false。你没有正确启动 pdo,你可能想检查查询是否没有返回错误,所以:

$pdo = new pdo('mysql:host=localhost;dbname=widget_corp;charset=utf-8', 'root', '');
$query = $pdo->query("SELECT * FROM `users`");
if($query !== false)
{
    $result_array = $query->fetchAll(PDO::FETCH_ASSOC);
}

【讨论】:

  • host=localhost;dbname=widget_corp 这是错误。我没有正确初始化 pdo。
【解决方案4】:

改用此代码:

$pdo = new PDO('mysql:host=localhost;dbname=widget_corp;charset=UTF-8', 'root', '');
$query = $pdo->query("SELECT * FROM `users`");
$result_array = $query->fetchAll(PDO::FETCH_ASSOC);

如果这不起作用,您确定PDO 安装正确吗?

【讨论】:

  • @YousufIqbal 哦,抱歉没有发现那个错误。我编辑了我的答案,看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2015-12-30
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多