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

PHP数据库查询中REPLACE替换&遇分号错误,求解决方案

解决SQL表达式中分号触发的InvalidArgumentException问题

问题原因

你遇到的错误是因为数据库查询构建器(看起来像是Drupal的Database API)会将SQL字符串中的分号;识别为SQL语句的结束标记,而你在REPLACE表达式里直接写了&(包含分号),触发了安全校验,所以抛出了; is not supported in SQL strings的异常。

推荐解决方法:使用参数绑定

最安全且有效的方式是通过参数绑定传递需要替换的字符串,这样查询构建器会正确处理特殊字符,不会把分号当成语句分隔符,同时还能避免SQL注入风险。修改你的addExpression代码如下:

// 替换原来的addExpression行
$select_stock->addExpression(
    "REPLACE(b.corporateName, :amp_entity, :amp_char)",
    'corporateName_clean', // 给处理后的字段起一个别名,方便后续获取
    [
        ':amp_entity' => '&',
        ':amp_char' => '&'
    ]
);

补充说明

  • 参数绑定是数据库查询构建器推荐的写法,它会自动处理特殊字符的转义,避免各种语法冲突和安全问题。
  • 另外注意你代码里的$select_stock->escapeLike($cName)调用后并没有实际使用这个处理后的$cName,如果需要用它做模糊查询,记得把它放到对应的condition里,比如:
    $select_stock->condition('b.corporateName', '%' . $cName . '%', 'LIKE');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:11:07