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

时间:2016-01-23 08:07:41

标签: php mysql xampp

嗨,我正在学习如何使用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));

?>

非常感谢任何积极的意见,谢谢。

1 个答案:

答案 0 :(得分:0)

您应该一次使用查询 exec 获取一个SQL语句:

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

有可能do otherwise,但有一些警告。通常,您可以拥有多个结果集,并且需要指出要检索的结果集。如果你只是单独打电话,生活就会简单得多。

旁注:您可以在连接字符串中指定UTF-8字符集,如下所示:

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

那么你不需要这个:

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