我正在尝试连接到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>';
}