将数组传递给函数以在PP中查询数据库

时间:2017-02-20 22:05:40

标签: php mysql arrays

我想传递一个具有不同数量的列名的数组和表来查询数据库。

public function get_list() {

    $list = func_get_args();
    $table = array_pop($list);
    $fields = implode(', ', $list);

    $sql = "SELECT $fields FROM $table";
    $data = array();
    try {
      $dbi = db::getInstance();
      $stmt = $dbi->data->prepare($sql); 
      $stmt->execute();
      while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $data[]=$row[$fields];
      }
      return $data;     
    }
    catch(PDOException $ex) { 
      die($ex); 
    }  
  }

如果只有一个,查询将获取表和右列。 但是,如果数组包含多个列,则表示:

  

未定义的索引:value1,value2

是否有一种有效的方法可以使用逗号分隔的字符串来查询多个列?

非常感谢!

1 个答案:

答案 0 :(得分:1)

不确定您要在循环中使用$fields尝试做什么。您的查询将仅返回您指定的字段。所以你的代码是:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $data[] = $row;
}

但是有两种方法可以显示数据。只需在循环中分配:

while ($data[] = $stmt->fetch(PDO::FETCH_ASSOC)) {}

或使用函数获取所有行:

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

但是,如果我打算采用这种方法,我会将表和字段(作为数组)作为指定的参数传递:

public function get_list($table, $fields)

要在动态字段的函数外部使用结果,您需要循环$rows来获取它们:

foreach ($this->model->get_list($fields, $table) as $row) {
    foreach ($row as $field => $value) {
        echo "$field contains $value";
    }
}