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

PHP使用shell_exec执行带LIKE的MySQL查询报unquoted string错误如何解决

解决方案

根因

报错是多层引号转义冲突导致:代码同时涉及PHP字符串解析、Shell命令解析、MySQL语法解析三层规则,多LIKE条件组合时原有的手动转义方式会提前中断Shell层的字符串边界,触发未引用字符串错误。单个条件时转义序列刚好匹配Shell字符串格式,所以可正常运行。

最优解法

使用PHP内置的escapeshellarg()函数自动处理SQL语句的Shell层转义,完全避免手动嵌套转义引号的混乱,代码如下:

// 直接按MySQL原生语法写查询语句,无需额外转义
$sql = "SELECT TABLE_NAME,
       COLUMN_NAME 
FROM information_schema.COLUMNS
WHERE COLUMN_NAME LIKE '%lead%' 
AND TABLE_NAME LIKE '%leads%'";

// escapeshellarg会自动将SQL处理为符合Shell规则的转义字符串
$abc = shell_exec("mysql --user=**** --password=**** --host=**** db -e " . escapeshellarg($sql));

手动转义方案(不推荐)

如果一定要手动写转义,需要严格遵循Shell单引号嵌套规则:Shell单引号包裹的字符串内需要出现单引号时,需写成'\''格式,修正后的写法如下:

$abc = shell_exec("mysql --user=**** --password=**** --host=**** db -e 'SELECT TABLE_NAME,COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME LIKE '\''%lead%'\'' AND TABLE_NAME LIKE '\''%leads%'\'' '");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:36:05