Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP致命错误:未捕获错误:在boolean上调用成员函数setFetchMode()_Php_Html_Mysql_Pdo - Fatal编程技术网

PHP致命错误:未捕获错误:在boolean上调用成员函数setFetchMode()

PHP致命错误:未捕获错误:在boolean上调用成员函数setFetchMode(),php,html,mysql,pdo,Php,Html,Mysql,Pdo,我理解,当您尝试对非对象的对象调用方法时,会发生此错误。在这种情况下,应该包含对象的变量实际上是一个布尔值 我只是不知道怎么修 如果查看MySQL::query(),函数将返回false(错误时)或MySQL\u result类型的对象。错误的SQL查询将导致查询失败,函数返回false 因为错误发生在我尝试调用setFetchMode时,这可能意味着我的PDO查询失败,但我真的不知道 <?php $host = 'localhost'; $dbname = 'DBNAME'; $use

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

我只是不知道怎么修

如果查看MySQL::query(),函数将返回false(错误时)或MySQL\u 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/somefile/anotherfile/FILENAME.PHP:12中调用布尔值上的成员函数setFetchMode()” 因为$q是假的。我只是不知道如何让它返回对象


奇怪的是,它在我的独立服务器上运行得非常好。

如果你的$q为false,则意味着你在sql查询或连接中有错误, 您可以使用此连接查看有关错误的更多信息:

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

然后在您尝试访问(bool)->{someMethod}之前,它将抛出异常

请在发布之前进行研究。您的问题是
$q
变量为false。@GiacomoM我知道它为false,因为查询失败。我只是不知道如何让它返回对象。我在问题中陈述了这一点。它现在抛出错误:无法连接到数据库******\u文献:SQLSTATE[42000]:语法错误或访问冲突:1065查询为空