Как изменить имена полей в ассоциативных массивах, возвращаемых запросами выборки PDO (SELECT / WHERE)? - PullRequest
0 голосов
/ 13 июня 2019

При создании запроса PDO с использованием fetchAll (PDO :: FETCH_ASSOC), он возвращает ассоциативный массив, который я могу json_encode в виде строки, подобной этой:

[{"Email_Address":"address@mail.com","Related_Data":"1239873652"}]

Однако я бы предпочел упростить ту же строку следующим образом:

[{"from":"address@mail.com","data":"1239873652"}]

Это не только уменьшает объем данных, передаваемых при большом количестве записей, но и обеспечивает дополнительный уровень безопасности, не раскрывая имена полей в базе данных.

Спасибо

Это код PHP, используемый:

$stmt = $db->query('SELECT * FROM Table WHERE Email_Address = \'address@mail.com\'');
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($array);

При использовании псевдонимов "AS":

$stmt = $db->query('SELECT Email_Address AS from, Related_Data AS data FROM Messages WHERE Email_Address = \'address@mail.com\'');

Сервер возвращает следующую ошибку:

Предупреждение: PDO :: query (): SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с данными «Related_Data AS» из таблицы WHERE Email_Address ='address@mail.com''

1 Ответ

2 голосов
/ 13 июня 2019

Вы можете и должны перечислить все свои столбцы в операторе SELECT.Затем вы можете попытаться создать алиас для них:

SELECT 
    Email_Address AS mail, 
    Related_Data AS data 
FROM Table
WHERE Email_Address = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...