Как использовать массив / имплозу в запросе PDO SELECT

У меня есть функция, которая возвращает пользовательские данные из базы данных. Но я хочу вернуть только выбранную строку, например, имя пользователя, поэтому я создал для этого массив, давая возможность echo $userdata['anything'], увидеть код:

$session_user_id = $_SESSION['user_id'];
$user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name'); }

а также

function user_data($user_id){

$pdo = new PDO("mysql:host=localhost;dbname=MYDATABASE;", "MYUSERNAME", "MYPASSWORD");
$data = array();
$user_id = (int)$user_id;

$func_num_args = func_num_args();
$func_get_args = func_get_args();

if ($func_num_args > 1) {
unset($func_get_args[0]);
$fields = '`' . implode(', ', $func_get_args) . '`';
echo $fields;
$stmt = $pdo->prepare("SELECT :fields FROM `users` WHERE `user_id` = :user_id");
$stmt->execute(array(':user_id' => $user_id, ':fields' => $fields));
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($data);
}
}

Проблема в том, что это не работает. Возвращается

Array ( [0] => Array ( [`user_id, username, password, first_name, last_name`] => `user_id, username, password, first_name, last_name` ) )

Тем не менее, замена :fields например 'username' работает. Можно ли использовать этот взрыв?

0

Решение

Изменить:

$stmt = $pdo->prepare("SELECT :fields FROM `users` WHERE `user_id` = :user_id");

чтобы:

$stmt = $pdo->prepare("SELECT $fields FROM `users` WHERE `user_id` = :user_id");

и удалите $ fields из массива параметров исполнения.

Параметризованные заполнители предназначены только для значений.

ОБНОВИТЬ

Также эта строка неверна:

$fields = '`' . implode(', ', $func_get_args) . '`';

Это выведет `вне списка полей, а не каждого имени столбца.

Попробуйте удалить их так:

$fields = implode(', ', $func_get_args);
1

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

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

По вопросам рекламы [email protected]