2

我的错误:

( ! ) 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'];
}
4

3 回答 3

6

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

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

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

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

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

关于你的其他问题

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

SELECT * FROM articles

或者

SELECT id, title FROM articles
于 2012-08-25T22:41:11.047 回答
2

代替:

$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'];
}
于 2012-08-25T22:44:22.800 回答
0

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

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

于 2012-08-25T22:43:47.207 回答