【问题标题】:PHP Fatal error: Uncaught Error: Call to a member function setFetchMode() on boolean [duplicate]PHP致命错误:未捕获的错误:在布尔值上调用成员函数setFetchMode()[重复]
【发布时间】:2019-12-23 02:21:08
【问题描述】:

我了解当您尝试对非对象调用方法时会发生此错误。在这种情况下,应该保存对象的变量实际上是一个布尔值。

我只是不知道如何解决它。

如果您查看 MySQL::query(),该函数返回 false(错误时)或 mysql_result 类型的对象。错误的 SQL 查询会导致查询失败,函数返回 false。

因为我尝试调用setFetchMode时出现错误,这可能意味着我的PDO查询失败,但我真的不知道。

<?php

$host = 'localhost';
$dbname = 'DBNAME';
$username = 'USERNAME';
$password = 'PASSWORD';

try {

   $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

   $sql = 'SELECT id, topic, category, type, doi, author, year
   FROM literature
   ORDER BY id';

   $q = $pdo->query($sql);

   $q->setFetchMode(PDO::FETCH_ASSOC);

} catch (PDOException $e) {

   die("Could not connect to the database $dbname :" . $e->getMessage());

}

?>

它返回错误: “PHP 致命错误:未捕获的错误:调用 /root/somewhere/somefile/anotherfile/FILENAME.php:12 中布尔值的成员函数 setFetchMode()” 因为 $q 是假的。我只是不知道如何让它返回对象。

奇怪的是它在我的独立服务器上运行良好。

【问题讨论】:

  • 请在发帖前进行研究。你的问题是你的 $q 变量是假的。
  • @GiacomoM 我知道这是错误的,因为查询失败。我只是不知道如何让它返回对象。我在问题中说明了这一点。

标签: php html mysql pdo


【解决方案1】:

如果您的 $q 为 false,则表示您的 sql 查询或连接有错误, 您可以使用此连接查看有关您的错误的更多信息:

$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

那么它会在你尝试访问之前抛出异常 (bool)->{someMethod}

【讨论】:

  • 现在抛出错误:无法连接到数据库 *******_literature :SQLSTATE[42000]: 语法错误或访问冲突:1065 查询为空
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2018-05-06
  • 2015-02-08
  • 2016-09-24
相关资源
最近更新 更多