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

PHP字符串生成多余反斜杠问题:SQL LIKE查询转义如何解决?

问题解决方法

首先说明你遇到的现象的本质:$wpdb->prepare输出的双引号前的反斜杠是MySQL要求的合法转义字符,不属于多余内容。MySQL执行查询时会自动将\"识别为普通双引号,不会影响匹配逻辑,你直接执行生成的SQL即可得到正确结果。
你之前用str_replace移除反斜杠无效,是因为反斜杠是prepare方法执行时自动给特殊字符添加的转义标识,你在调用prepare之前处理字符串不会影响它的转义逻辑,所以没有效果。

接下来按场景选择解决方案:

  • 常规场景(推荐,兼顾安全和正确性):使用WordPress官方为LIKE查询提供的esc_like方法处理搜索词,符合开发规范,代码如下:
$search_term = '"cardSelected":"120-B-110-C"';
// 先转义搜索词中属于LIKE语法的特殊字符(如%、_),再拼接通配符
$like = '%' . $wpdb->esc_like( $search_term ) . '%';

$sql = $wpdb->prepare(
       "SELECT * FROM $wpdb->posts WHERE post_status = %s AND post_content LIKE %s;",
       'publish',
       $like
);
  • 特殊场景(仅适用于搜索词完全可控、无用户输入的场景,存在SQL注入风险):自行拼接LIKE部分内容,绕开prepare对搜索词的转义,代码如下:
$search_term = '"cardSelected":"120-B-110-C"';
// 手动做基础转义
$safe_search = esc_sql( $search_term );
$like = '%' . $safe_search . '%';

// LIKE部分直接拼接进SQL,其余变量仍用prepare转义保证安全
$sql = $wpdb->prepare(
       "SELECT * FROM $wpdb->posts WHERE post_status = %s AND post_content LIKE '$like';",
       'publish'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:45:01