首页 > 解决方案 > 如何更改 PDO(SELECT / WHERE)获取查询返回的关联数组中的字段名称?

问题描述

使用 fetchAll(PDO::FETCH_ASSOC) 进行 PDO 查询时,它会返回一个关联数组,我可以将其 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 服务器版本相对应的手册,以获取正确的语法,以便在 'from, Related_Data AS data FROM Table WHERE Email_Address = 'address@mail.com'' 附近使用

标签: phpmysqlpdo

解决方案


您可以并且应该在 SELECT 语句中列出所有列。然后,您可以尝试给它们起别名:

SELECT 
    Email_Address AS mail, 
    Related_Data AS data 
FROM Table
WHERE Email_Address = ?

推荐阅读