Drupal 6通过数据库查询形成迭代

时间:2013-01-31 02:38:13

标签: php mysql drupal foreach drupal-6

我正在尝试对从db查询中提取的数组运行foreach但由于某种原因它无效。这是一个简单的语法错误还是其他什么?

  global $user
  $ras = db_query("SELECT * FROM {table} WHERE id='%s'", $user->name); 
  $sas = db_fetch_array($ras);  
  $arr = array("one",2,3,"four",5);

  $form['questionnaire'] = array (
    '#type'=>'fieldset', 
    '#title'=> 'test', );

  foreach ($arr as $id => $value){ 
  $form['questionnaire']['fill'.$id] = array(
    '#type'=>'textfield',
    '#title'=> $value,
  );
  }

然而,以下不会起作用:

  foreach ($sas as $id => $value){ 
  $form['questionnaire']['fill'.$id] = array(
    '#type'=>'textfield',
    '#title'=> $value,
  );
  }

2 个答案:

答案 0 :(得分:1)

除非您的查询返回单个结果,我怀疑这是因为您期望得到一系列结果,否则您的语法会丢失。 db_fetch_array只会获取一行。所以你需要做这样的事情。

$form['questionnaire'] = array(
  '#type' => 'fieldset',
  '#title' => 'test',
);

global $user;
$result = db_query("SELECT * FROM {table} WHERE id='%s'", $user->name);

// Remember that $row is an array where the key names map the column names in your table
// So if you have a column 'id' and another one 'value' you can access the
// value for one row like this $row['id] and $row['value']
while ($row = db_fetch_array($result)) {
  $form['questionnaire']['fill' . $row['id']] = array(
    '#type' => 'textfield',
    '#title' => $row['column_name'],
  );
}

更新07.02.2013 :使用foreach()循环代替while()

foreach (db_fetch_array ($row) as $row) {
    echo $row['name'];
}

答案 1 :(得分:0)

语法看起来正确但明显的答案是查询没有返回任何数据。您是否有可能忘记全球$用户? Devel模块可以为此提供帮助。