【问题标题】:Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\xampp\htdocs\karte.php:32 Stack trace: #0 {main} thrown in致命错误:未捕获错误:调用 C:\xampp\htdocs\karte.php:32 中布尔值的成员函数 fetch() 堆栈跟踪:#0 {main} 抛出
【发布时间】:2016-02-11 17:47:34
【问题描述】:

我有一个无法解决的问题。在我的口袋妖怪数据库中,我希望单击一个链接,该链接显示我可以在城市中找到哪个培训师(城市应该由用户选择为 href)

 <!DOCTYPE html>
<html>
 <head>
  <title></title>
 </head>

 <body>
   <a href="?spalte=7">Malvenfroh City</a>

<?php

if (isset($_GET["spalte"])) {
 $spalte = $_GET["spalte"];
}
else {
 $spalte = 'Wurzelheim';
}

$verbindung = new PDO ('mysql:host=localhost;dbname=pokemon', 'root', '');
$abfrage = $verbindung->query("SELECT trainer_name from trainer,ort WHERE ort_id=`".$spalte ."` AND trainer.ort_id=ort.id");
while( $row = $abfrage->fetch(PDO::FETCH_OBJ)) {
        echo $row['trainer_name'].'<br>'; 


}
?>          

</body>
</html>

【问题讨论】:

  • 反引号会杀了你。
  • 如果出现此错误消息,查询可能会失败。 $verbindung-&gt;query() 返回 false 而不是查询结果集。检查$abfrage === false。 A-2-A的意思是查询中的错误可能是你使用了反引号字符:`,它在MySQL中有特殊含义,使用'(单引号)或"(双引号)引号)用于字符串。

标签: php mysql sql database pdo


【解决方案1】:

两件事:-

1.从查询中删除`(反引号)

2.AND trainer.ort_id=ort.id 我在您的代码中的任何地方都没有看到ort.id 值。所以要么删除它,要么尝试为它赋值。

所以你的查询会是这样的:-

$abfrage = $verbindung->query("SELECT trainer_name from trainer,ort WHERE ort_id=".$spalte);

或者

$abfrage = $verbindung->query("SELECT trainer_name from trainer,ort WHERE ort_id= $spalte");

另外,在我们讨论结束时,您需要更改 PDO::FETCH_OBJ to PDO::FETCH_ASSOC

【讨论】:

  • 查询一定是对的,我用myphpadmin测试过,它工作正常,这不可能是问题
  • 我试过了,还是一样的问题。在这一行中一定是我认为的问题: while( $row = $abfrage->fetch(PDO::FETCH_OBJ)) { echo $row['trainer_name'].'
    ';
  • 现在它可以工作了,但我又遇到了一个错误,不能使用 stdClass 类型的对象作为 C:\xampp\htdocs\karte.php:22 中的数组
  • 很好的解释兄弟
猜你喜欢
  • 2021-04-18
  • 2021-09-04
  • 2021-09-16
  • 2018-03-04
  • 1970-01-01
  • 2016-09-19
  • 2023-03-18
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多