Я хотел бы передать массив с различным количеством имен столбцов и таблицы для запроса базы данных.
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);
}
}
Запрос получает таблицу и правый столбец, если есть только один.
Но если массив содержит более одного столбца, он говорит:
Неопределенный индекс: значение1, значение2
Есть ли правильный способ использовать строку через запятую для запроса более одного столбца?
Большое спасибо!
Не уверен, что вы пытаетесь сделать с $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";
}
}
Других решений пока нет …