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'];
}