php - 如何更改 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'' 附近使用
解决方案
您可以并且应该在 SELECT 语句中列出所有列。然后,您可以尝试给它们起别名:
SELECT
Email_Address AS mail,
Related_Data AS data
FROM Table
WHERE Email_Address = ?
推荐阅读
- kubernetes - Kubernetes 调度程序扩展器——它们何时被调用?
- html - 有没有办法根据中心对齐这些项目?
- java - 使用 selenium 和 cucumber 测试 java 类
- microsoft-graph-api - 未收到 MS Teams 的任何更改通知
- firebase - 如何等待 init 方法中的函数?
- express - Express 电子邮件服务器 Gatsby
- apache-spark - to_date 无法在 Spark 3.0 中解析日期
- c++ - 在我定义的类中释放分配的缓冲内存的问题
- vb.net - 尝试在 DataGridView 上添加新行时出现 System.InvalidOperationException
- swift - 致命错误:SwiftUI 中的索引超出范围