You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO执行URL传入SQL语句时出现MySQL 1064语法错误求助

问题根源与解决方案

你的问题出在这一行多余的代码:

$id = '"'.$_GET['query'].'"';

你给完整的SQL语句套了一层双引号,导致PDO最终执行的SQL变成了这个样子:

"INSERT INTO orders (IDCliente, IDOrdine, DTOrdine) VALUES ('0569', 2593, '19-09-2018')"

而SQL语法里,整段查询语句根本不需要被引号包裹——这对双引号会被数据库识别成无效的语法符号,直接触发1064语法错误。

修复步骤

直接删除那行添加双引号的代码,把获取参数的逻辑改成:

$id = isset($_GET['query']) ? $_GET['query'] : die('ERROR: Empty string');

这样$id就直接是原始的合法SQL语句,传给prepare()后就能正常执行了。

额外提醒(针对你的场景补充)

虽然你提到这个功能仅内部业务软件使用,但这种直接接收并执行外部传入完整SQL的方式,存在极高的SQL注入风险——哪怕是内部系统,一旦请求被劫持、参数被篡改,数据库的安全会直接受到威胁。如果后续有优化空间,建议改用PDO的参数化查询模式,把SQL结构和数据分离,比如:

// 示例:拆分SQL结构与参数
$stmt = $con->prepare("INSERT INTO orders (IDCliente, IDOrdine, DTOrdine) VALUES (:clientId, :orderId, :orderDate)");
$stmt->bindParam(':clientId', $clientId);
$stmt->bindParam(':orderId', $orderId);
$stmt->bindParam(':orderDate', $orderDate);
$stmt->execute();

当然,如果当前场景确实只能通过传入完整SQL来对接,修复后的代码可以满足你的需求。

内容的提问来源于stack exchange,提问作者Ogum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:08:21