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

PHP Yii2框架中使用andFilterWhere函数如何防范SQL注入

Yii2 andFilterWhere LIKE查询防SQL注入方案

一、当前写法已经具备SQL注入防护能力

你使用数组格式传递查询条件给andFilterWhere()时,Yii2底层会自动完成参数绑定,不会直接拼接用户输入到SQL语句中,防护逻辑和你看到的官方:status参数绑定示例完全一致。
你给出的代码最终生成的SQL片段会类似:

live_list_data.original_roamer_request_id LIKE :qp1

其中:qp1会由Yii2自动绑定你传入的$pattern变量,完全不存在SQL注入风险,不需要额外修改即可正常使用。

二、LIKE场景手动参数绑定写法(对应官方示例格式)

如果你需要手写字符串格式的查询条件,可以参考如下写法适配LIKE场景:

$query = new Query();
// 通配符%添加到绑定参数值中,不要写在SQL字符串里
$query->andFilterWhere(
    LiveListData::tableName() . '.originalRoamerRequestId LIKE :pattern',
    [':pattern' => '%' . $pattern . '%']
);

三、额外业务注意事项:LIKE通配符转义

上述两种方案仅解决SQL注入问题,如果你的业务不希望用户输入的%、_等SQL LIKE专用通配符生效(比如用户输入test%时,你只想匹配实际包含test%字符串的记录,而非所有test开头的记录),需要手动转义用户输入的特殊字符:

// 转义通配符
$safePattern = str_replace(['%', '_'], ['\%', '\_'], $pattern);
// 再传入查询条件
$query->andFilterWhere( [ 'like', LiveListData::tableName() . '.originalRoamerRequestId', $safePattern ] );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:03