Php PDO-对非对象调用成员函数fetch()

Php PDO-对非对象调用成员函数fetch(),php,database,pdo,fetch,fatal-error,Php,Database,Pdo,Fetch,Fatal Error,我的错误: (!)致命错误:对C:\wamp\www\PDO\index.php第13行的非对象调用成员函数fetch() 我的代码: <?php $config['db'] = array( 'host' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'learnpdo' );

我的错误:

(!)致命错误:对C:\wamp\www\PDO\index.php第13行的非对象调用成员函数fetch()

我的代码:

<?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'];
}
PDO::query()
如果查询失败,则返回
false
(这显然是一个非对象)。这就是你的问题您的查询有错误。

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

$db->setAttribute(PDO::ATTR_ERRMODE, PDO:ERRMODE_EXCEPTION);
然后捕获错误以查看查询中的错误

存在的不同错误模式是
PDO::ERRMODE_SILENT
PDO::ERRMODE_WARNING
PDO:ERRMODE_EXCEPTION
。你可以在报纸上读到他们。了解如何在编写SQL时进行调试非常重要,这是不必问此类问题的关键。

关于你的其他问题 如果要使用id列,必须选择它

SELECT * FROM articles


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

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

而不是:

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

编辑 尝试:


此错误几乎总是意味着您的查询没有按您希望的方式工作,因此
$query
null
(或false?)而不是查询结果对象。感谢您的快速响应。问题是,我不知道这个查询出了什么问题。“文章”表与“标题”列一样存在。很抱歉,这是我第一次使用PDO。我在下面的回答中发布了一些基本的调试建议。感谢您的快速响应。问题是,我不知道这个查询出了什么问题。“文章”表与“标题”列一样存在。很抱歉,这是我第一次使用PDO。添加错误报告,以便您可以看到实际的SQL错误。没有看到您的DB模式,我们无法确定您的查询出了什么问题。哦,dayum,这很尴尬,很抱歉,愚蠢的错误哈语法不寻常,但我刚刚测试了它,它工作正常(假设标题实际上是文章中的一列)。@octern认为它可能会工作,虽然没有SQL控制台可供使用,但不确定服务器是否处理了该问题,并且user1453094 Hmmmm我将为此打开错误报告,还将直接对数据库运行查询以确保安全。感谢您的帮助,到目前为止非常有帮助。我将db行更改为
$db=newpdo('mysql:host=localhost;dbname=learnpdo;charset=UTF-8','root','')但现在我在C:\wamp\www\PDO\index.php中得到了未定义的index:id14@user1453094你有什么代码?当你只返回标题时,很可能你正在试图从这些行访问id,你能编辑你的问题吗?@user1453094你的sql查询只返回标题,所以当你试图获取该行的id时,它不在那里,这就是PHP的基本意思:)很高兴能提供帮助。谢谢,你的回答非常有用。但我现在又犯了一个错误:
SELECT id, title FROM articles
$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'];
}