PHP如何将指定SQL表的查询结果转为仅含名称与值的JSON对象
如何用PHP将config表查询结果转为仅含名称与值的JSON对象?
先确认下我们的基础场景:
我们有一个config表,结构是这样的:
CREATE TABLE config ( ID INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(50), valor VARCHAR(50) );
表里现有的数据如下:
| ID | nombre | valor |
|---|---|---|
| 1 | name1 | value1 |
| 2 | name2 | value2 |
| 3 | name3 | value3 |
要把查询结果转成只包含nombre(名称)和valor(值)的JSON对象,其实很简单,分几步就能搞定,我给你两种常用的实现方式:
方法一:使用MySQLi扩展
这是PHP里比较常用的数据库操作扩展,代码步骤清晰:
1. 连接数据库
首先先建立和数据库的连接,替换成你自己的数据库参数:
$servername = "localhost"; $username = "你的数据库用户名"; $password = "你的数据库密码"; $dbname = "你的数据库名"; // 创建连接实例 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); }
2. 查询并整理数据
我们只需要查询nombre和valor两个字段,然后把它们整理成键值对的关联数组:
// 编写查询SQL,只获取需要的字段 $sql = "SELECT nombre, valor FROM config"; $result = $conn->query($sql); // 初始化空数组用来存储结果 $configData = []; // 如果有查询结果,遍历每一行并整理成键值对 if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { // 把nombre作为数组的键,valor作为对应的值 $configData[$row["nombre"]] = $row["valor"]; } } // 记得关闭数据库连接 $conn->close();
3. 转换为JSON对象
用json_encode把关联数组转成JSON格式:
$jsonOutput = json_encode($configData); // 输出或者按需使用这个JSON echo $jsonOutput;
执行后你会得到这样的JSON结果:
{"name1":"value1","name2":"value2","name3":"value3"}
方法二:使用PDO扩展
如果你习惯用PDO(更通用的数据库操作扩展,支持多种数据库),代码如下:
try { $servername = "localhost"; $username = "你的数据库用户名"; $password = "你的数据库密码"; $dbname = "你的数据库名"; // 建立PDO连接 $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 准备并执行查询 $stmt = $conn->prepare("SELECT nombre, valor FROM config"); $stmt->execute(); $configData = []; // 遍历结果并整理成键值对 while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $configData[$row["nombre"]] = $row["valor"]; } // 转成JSON并输出 $jsonOutput = json_encode($configData); echo $jsonOutput; } catch(PDOException $e) { echo "查询出错: " . $e->getMessage(); } // 关闭PDO连接 $conn = null;
一些注意事项
- 确保你的
config表中nombre字段的值是唯一的,否则后面的记录会覆盖前面的(如果需要的话,可以给表加唯一约束:ALTER TABLE config ADD UNIQUE(nombre);) - 如果你的值里包含中文或者特殊字符,转JSON的时候可以加上
JSON_UNESCAPED_UNICODE参数,避免字符被转义:json_encode($configData, JSON_UNESCAPED_UNICODE); - 记得在操作完成后关闭数据库连接,避免资源浪费
内容的提问来源于stack exchange,提问作者Pedro Jose Otero Rodriguez
相关产品推荐
相关产品推荐

