我想传递一个具有不同数量的列名的数组和表来查询数据库。
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
是否有一种有效的方法可以使用逗号分隔的字符串来查询多个列?
非常感谢!
答案 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";
}
}