MYSQL / PHP:使用带有PDO的FetchAll创建一个数组

时间:2017-02-14 16:19:39

标签: php mysql pdo

我是PDO的新手,无法将获取结果放入数组中。

以下代码成功查询数据库。但是,我想将结果放入一个数组中,以便我可以单独使用数组的元素。我不确定下面的$result究竟是什么。它已经是阵列吗?或者它是什么。我想我需要使用fetchAll来获取数组。如果是这样,会很感激正确的代码来做到这一点。或者,如果下面的$results已经是一个数组,那么我与fetchAll之间的区别是什么?

//USE PDO TO CONNECT TO DBASE
$hostdb = "my host";
$namedb = "mydb";
$passdb = "bypass";
$userdb = "myusername";

try {
  // Connect and create the PDO object
  $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8

  // Define and perform the SQL SELECT query
  $sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";
  $result = $conn->query($sql); // THIS WORKS
// $result = $sql->fetchAll(PDO::FETCH_OBJ);  //THIS DOES NOT WORK
   if($result !== false) {

    // Parse the result set
    foreach($result as $row) {
      echo $row['id']. ' - '. $row['name']. ' - '. $row['category']. ' - '. $row['link']. '<br />';
    }
  }

  $conn = null;        // Disconnect
}
catch(PDOException $e) {
  echo $e->getMessage();
}

2 个答案:

答案 0 :(得分:1)

fetchAll会将完整的结果集返回到变量中。该变量是一个数组,结果集中每一行都有一个出现。根据您在fetchAll中使用的参数,它将是行数组或行对象数组的数组。

但是你的语法中有一些小错误

// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";

$result = $conn->query($sql); 
if($result !== false) {

    // use $result here as that you PDO::Statement object
    $allRows = $result->fetchAll(PDO::FETCH_OBJ); 

    // Parse the result set
    foreach($allRows as $row) {
        // also amend here to address the contents of the allRows i.e. $row as objects
      echo $row->id. ' - '. $row->name. ' - '. $row->category. ' - '. $row->link. '<br />';
    }

答案 1 :(得分:0)

首先,要确保$result使用var_dump($result)是什么,因为PDO::query方法会返回PDOStatement对象。此外,在您的情况下,它不是一个数组,它是一个PDOStatement对象。请参阅http://php.net/manual/en/pdo.query.php。 之后,我建议使用PDO::prepare()PDO::execute()方法来运行您的SQL查询,因为它性能友好,特别是如果您要多次运行它并且通过阻止SQL注入更安全。请参阅http://php.net/manual/en/pdo.prepare.php。 毕竟,PDO::fetchAll()将返回结果集的数组,这是您已经想要的。请参阅PHP PDO::fetchAll()手册。 所以我要做的是:

$sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";

$statement = $conn->prepare($sql);
if($statement->execute())
{
    $results = $statement->fetchAll('Your prefered fetch style');

    foreach($results as $result) {
      ...
    }
}