phpMyAdmin整数列求和SQL正常,PHP代码触发Swift解码错误
问题分析与解决方案
首先,你遇到的核心问题是自动生成的PHP代码里SQL语句的别名引号被错误转义,这直接导致SQL执行后的输出不是合法JSON格式,进而触发了Swift的DecodingError.dataCorrupted错误。
错误点拆解
在phpMyAdmin中运行的SQL是完全正确的:
SELECT CAST(SUM(`foo1`) AS UNSIGNED) AS 'bar1', CAST(SUM(`foo2`) AS UNSIGNED) AS 'bar2' FROM `FUBAR`
但自动生成的PHP代码里,别名的引号被错误处理成了/‘bar1/’这种格式——这种转义方式完全不符合PHP字符串的语法规范,会导致SQL执行异常,最终PHP返回的内容不是预期的JSON数据(可能是SQL报错信息、乱码或无效文本),Swift自然无法解析。
修正后的PHP代码
你只需要把错误的转义引号替换成标准的英文单引号(或双引号,注意字符串包裹的一致性)即可:
// 方式1:双引号包裹SQL字符串,别名用单引号 $sql = "SELECT CAST(SUM(`foo1`) AS UNSIGNED) AS 'bar1', CAST(SUM(`foo2`) AS UNSIGNED) AS 'bar2' FROM `FUBAR`"; // 方式2:单引号包裹SQL字符串,别名用双引号(避免转义,更清晰) $sql = 'SELECT CAST(SUM(`foo1`) AS UNSIGNED) AS "bar1", CAST(SUM(`foo2`) AS UNSIGNED) AS "bar2" FROM `FUBAR`';
额外注意事项
为了确保Swift能正确解析返回结果,PHP端执行SQL后还需要:
- 检查SQL是否执行成功,避免语法或逻辑错误;
- 使用
json_encode()将查询结果转为JSON格式; - 设置正确的响应头:
header('Content-Type: application/json');,明确告诉Swift接收的是JSON数据。
内容的提问来源于stack exchange,提问作者ehounder
相关产品推荐
相关产品推荐

