1

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

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

致命错误:在第 11 行调用非对象 in/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。谢谢

4

3 回答 3

1

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

Then$query不是PDOStatementfalse您不能调用false->fetch().

于 2012-12-27T10:06:05.437 回答
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>';
}
于 2012-12-27T10:06:23.147 回答
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>';
}
于 2012-12-27T10:07:56.333 回答