调用成员函数FETCH_ASSOC"出错;-我的代码有什么问题?


Error calling member function "FETCH_ASSOC" - what is wrong with my code?

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

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

致命错误:在/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>';
}
?>

请让我知道,如果你有一个更好的方法来选择数据从mysql表使用php。试着学习PDO而不是我自己。由于

您必须在->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>';
}

可能是查询有问题,如打字错误或表不存在。

那么$query不是PDOStatement而是false,你不能调用false->fetch()

这是你的打字错误:

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