调用成员函数“FETCH_ASSOC”时出错 - 我的代码出了什么问题?

时间:2012-12-27 09:59:31

标签: php pdo

我正在尝试连接到PHP PDO并对数据运行简单查询,但是我遇到有关未创建对象的错误?我正在尝试尽可能简单,并建议不要创建单例数据库类,而是在需要时定义数据库PDO,这是用于初始(简单)查询。

这是我得到的错误。我需要做些什么来修复代码?

  

致命错误:在第11行的/ home / ... index.php中的非对象上调用成员函数fetch()

<?php

$dbhost = "localhost";
$dbname = "x";
$dbuser = "y";
$dbpass = "z";

$db = new PDO("mysql:host=$dbhost;db_name=$dbname", $dbuser, $dbpass);
$query = $db->query("SELECT * FROM tablename");

while ($row = $query->fetch(PDO::FETCH_ASSOC)){
    echo $row['field_name'],'<br>';
}
?>

如果您有更好的方法使用php从mysql表中选择数据,请告诉我。试图学习PDO而不是mysqli。感谢

3 个答案:

答案 0 :(得分:1)

可能是查询存在问题,例如拼写错误或表格不存在。

然后$query不是PDOStatement,而是false,您无法拨打false->fetch()

答案 1 :(得分:1)

您必须在->query->fetch之间进行选择。你不能混合方法

->query()

    $sql = 'SELECT * FROM tablename';
    foreach ($db->query($sql) as $row) {
        echo $row['field_name'],'<br>';
    }

->fetch()

$sth = $db->prepare("SELECT * FROM tablename");
$sth->execute();

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    echo $row['field_name'],'<br>';
}

答案 2 :(得分:1)

有你的错字:

$db = new PDO("mysql:host=$dbhost;db_name=$dbname", $dbuser, $dbpass);

应该是:

$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);

修正错字后,这段代码完美无缺:

$db = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);

$query = $db->query("SELECT * FROM wp_blogs");

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    var_dump($row).'<br>';
}