可以将Drupal db_query的结果转换为PHP数组吗?

时间:2011-06-09 14:44:43

标签: drupal

在Drupal中,我可以按如下方式执行SQL:

$query_object = db_query("SELECT * FROM {nodes}");

如果我知道查询只返回一个结果(所以只返回1行和1列),我可以直接获取它:

$result = db_result($query_object);

如果我得到了多个结果,我需要用以下内容循环它们:

$rows[] = array();
while (($row = db_fetch_object($query_object) != FALSE) {
  $rows[] = $row;
}

我想知道是否有更简单的方法可以做到这一点?有没有办法可以将所有结果转换为带有单个语句的数组?或者不是那样工作,因为db_result返回一个类似游标的对象,每次只能获取一行?

4 个答案:

答案 0 :(得分:26)

不在Drupal 6中。

在Drupal 7中,有一些fetch方法可以帮助避免这样的循环。来自http://drupal.org/node/310072

<?php
// Retrieve all records into an indexed array of stdClass objects.
$result->fetchAll();

// Retrieve all records into an associative array keyed by the field in the result specified.
$result->fetchAllAssoc($field);

// Retrieve a 2-column result set as an associative array of field 1 => field 2.
$result->fetchAllKeyed();
// You can also specify which two fields to use by specifying the column numbers for each field
$result->fetchAllKeyed(0,2); // would be field 0 => field 2
$result->fetchAllKeyed(1,0); // would be field 1 => field 0

// Retrieve a 1-column result set as one single array.
$result->fetchCol();
// Column number can be specified otherwise defaults to first column
$result->fetchCol($column_index);
?>

答案 1 :(得分:18)

在Drupal 7中,您还可以使用:

db_query('QUERY')->fetchAll(PDO::FETCH_ASSOC);

答案 2 :(得分:3)

我总是这样(只是一个简单的例子):

  $query = db_query("SELECT nid
        FROM {from}
        WHERE blallala
        ", 
     $tab_arg
    );
    if ($query->rowCount() == 0) {
    $output=t('no result')
   } else
    {
foreach($query as $result)
 {
 $tab_res[]=$result;
 }
foreach($tab_res as $res)
 {
 $output.=$res->nid;
 }
}

答案 3 :(得分:-1)

还可以使用db_fetch_array($result)$result = db_query($queryString)。正如Drupal文档中所解释的那样:

  

[返回] ...表示结果的下一行的关联数组,或   假。该对象的键是表字段的名称   由查询选择,值是此字段值   结果行。