передать массив в функцию для запроса базы данных в PP

Я хотел бы передать массив с различным количеством имен столбцов и таблицы для запроса базы данных.

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

Есть ли правильный способ использовать строку через запятую для запроса более одного столбца?

Большое спасибо!

0

Решение

Не уверен, что вы пытаетесь сделать с $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";
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector