未捕获的 PDOException:在 PDOStatement 对象上使用 fetchAll() 时的 SQLSTATE[HY000]

Uncaught PDOException: SQLSTATE[HY000] when using fetchAll() on PDOStatement object

嘿,我正在学习如何使用 PHP,并且已严格按照我正在观看的教程中的所有内容进行操作,但我不明白为什么会出现错误。这是我的代码:

<?php

  try {
    $db = new PDO("mysql: host = localhost; dbname = tutorialdb", "root", "");
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $db->exec("SET NAMES 'utf8'");
  } catch(Exception $e) {
    echo "Could not connect to database.";
    exit;
  }


  try {
    $results = $db->query("USE mydatab; SELECT name, price, img FROM products ORDER BY sku asc");
  } catch (Exception $e) {
    echo "Could not retrieve data.";
    exit;
  }

  echo "<pre>"
  var_dump($results->fetchAll(PDO::FETCH_ASSOC));

?>

任何积极的意见将不胜感激,谢谢。

您应该一次对一个 SQL 语句使用 queryexec

$db->exec("USE mydatab");
$results = $db->query("SELECT name, price, img FROM products ORDER BY sku asc");

可以 do otherwise,但有一些注意事项。一般来说,您可能有多个结果集,您需要指明要检索哪些结果集。如果您只拨打单独的电话,生活会简单得多。

Side-note:可以在连接字符串中指定UTF-8字符集,像这样:

 $db = new PDO("mysql: host=localhost; dbname=tutorialdb; charset=UTF8",
               "root", "");

那么你就不需要这个了:

 $db->exec("SET NAMES 'utf8'");