【问题标题】:PDO - Call to a member function fetch() on a non-object [duplicate]PDO - 在非对象上调用成员函数 fetch() [重复]
【发布时间】:2012-08-21 00:13:12
【问题描述】:

我的错误:

( ! ) Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\PDO\index.php on line 13

我的代码:

<?php 

$config['db'] = array(
    'host'      =>      'localhost',
    'username'  =>      'root',
    'password'  =>      '',
    'dbname'    =>      'learnpdo'
);

$db = new PDO('mysql:host='.$config['db']['host'].';dbname'.$config['db']['dbname'], $config['db']['username'], $config['db']['password']);
$query = $db->query("SELECT articles . title FROM articles");

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $row['title'];
}

我知道有很多这样的问题,但似乎没有一个答案有效。

谢谢


编辑:

以上已修复,感谢以下所有人。 :) 现在我又遇到了一个错误:

Notice: Undefined index: id in C:\wamp\www\PDO\index.php on line 7

这是我的数据库:

http://d.pr/i/vcod

这是我的代码:

$db = new PDO('mysql:host=localhost;dbname=learnpdo;charset=UTF-8', 'root', '');
$query = $db->query("SELECT `articles`.`title` FROM `articles`");

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $row['id'];
}

【问题讨论】:

  • 这个错误几乎总是意味着您的查询没有按照您希望的方式工作,因此$querynull(或错误?)而不是查询结果对象。
  • 感谢您的快速响应。问题是,我不知道查询有什么问题。文章表与标题列一样存在。抱歉打扰,这是我第一次使用 PDO。
  • 我在下面的回答中发布了一些基本的调试建议。

标签: php database pdo fetch fatal-error


【解决方案1】:

PDO::query() 如果查询失败,则返回false(这显然是一个非对象)。所以这是你的问题。 您的查询有误。

我建议你在 PDO 中设置错误模式。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO:ERRMODE_EXCEPTION);

然后捕获错误以查看您的查询有什么问题。

存在的不同错误模式是PDO::ERRMODE_SILENTPDO::ERRMODE_WARNINGPDO:ERRMODE_EXCEPTION。您可以在PHP manual on PDO 中了解它们。知道如何在编写 SQL 时进行调试很重要,并且是不必问这类问题的关键。

关于您的其他问题

如果你想使用它,你必须选择 id 列。

SELECT * FROM articles

SELECT id, title FROM articles

【讨论】:

  • 感谢您的快速响应。问题是,我不知道查询有什么问题。文章表与标题列一样存在。抱歉打扰,这是我第一次使用 PDO。
  • 添加错误报告,以便您查看实际的 SQL 错误。如果没有看到您的数据库架构,我们就无法确定您的查询出了什么问题。
  • 噢,天啊,太尴尬了,抱歉,愚蠢的错误哈哈
【解决方案2】:

这个错误几乎总是意味着您的查询没有按照您希望的方式工作,因此 $query 为空(或假?)而不是查询结果对象。尝试回显db-&gt;errorinfo(),看看它是否告诉你出了什么问题。

您也可以尝试将查询文本直接粘贴到 mysql 中并查看结果。如果这似乎工作正常,那么问题可能出在您的数据库连接代码上。

【讨论】:

【解决方案3】:

代替:

$query = $db->query("SELECT articles . title FROM articles");

试试:

$query = $db->query("SELECT title FROM articles");

编辑

试试:

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    echo $row['title'];
}

【讨论】:

  • 语法不寻常,但我刚刚测试过,它工作正常(假设标题实际上是文章中的一列)。
  • @octern 认为它可能有效,但手头没有 SQL 控制台,并且不确定服务器是否处理了该问题,并且 user1453094 嗯,我会为此打开错误报告,同时运行直接对数据库进行查询以确保。
  • 感谢您的所有帮助,到目前为止非常有帮助。我将 db 行更改为 $db = new PDO('mysql:host=localhost;dbname=learnpdo;charset=UTF-8', 'root', ''); 但现在我在第 14 行得到 Undefined index: id in C:\wamp\www\PDO\index.php
  • @user1453094 你有什么代码?当您只返回标题时,您很可能正在尝试从这些行中访问 id,您可以编辑您的问题吗?
  • @user1453094 您的 sql 查询仅返回标题,因此当您尝试获取该行的 id 时它不存在,这就是 PHP 基本上所说的 :) 很高兴能提供帮助。
猜你喜欢
  • 2011-03-21
  • 2011-10-16
  • 1970-01-01
  • 2016-03-25
  • 2013-10-01
  • 2011-07-17
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多