调用未定义的方法PDO :: fetch()

joh*_*ohn 3 php mysql

我知道这里有几个关于这个标题的其他问题,但它们似乎是特定于案例的,或者我无法绕过它,但我在这段代码上得到了这个错误,我无法弄清楚为什么.

$db = new PDO($dsn, $username, $password);
$query = "Select * FROM book INNER JOIN course
          ON book.course = course.courseID
          ORDER BY courseTitle";

//query result
$books = array();
$sth = $db->query($query);
while( $row = $db->fetch(PDO::FETCH_ASSOC) ) {
    $books[] = $row; // appends each row to the array
}
Run Code Online (Sandbox Code Playgroud)

我想也许我的查询错了,所以我尝试了一个PDO教程的例子,我得到了相同类型的错误.我有什么要申报的,或者我要留下什么?

bes*_*rld 9

当使用与查询结果集相关的PDO函数时,应该使用$ sth而不是$ db.

$db = new PDO($dsn, $username, $password);
$query = "Select * FROM book INNER JOIN course
ON book.course = course.courseID
ORDER BY courseTitle";

//query result
$books = array();
$sth = $db->query($query);
while( $row = $sth->fetch(PDO::FETCH_ASSOC) ) {
  $books[] = $row; // appends each row to the array
}
Run Code Online (Sandbox Code Playgroud)

调试PDO时.在创建PDO对象后添加此行:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Run Code Online (Sandbox Code Playgroud)

然后,当查询/查询中存在错误时,将抛出异常.

  • @bestprogrammerintheworld:如果PDO没有激活,它会在`new PDO(...)`上崩溃.我打赌查询本身的语法错误. (2认同)