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

PHP MySQL中含LIKE关键字的WHERE子句不生效问题求助

问题分析与解决方案

嘿,我一眼就发现问题啦!你的查询没按c_type筛选,根源是SQL运算符的优先级——AND的优先级比OR高,导致你的语句实际执行逻辑和你想的不一样:

(c_type = 'Engineering' AND c_name LIKE '%{$name}%') OR location LIKE '%{$name}%'

意思就是:只要location匹配关键词,不管c_type是不是Engineering都会被查出来,这就难怪返回全部结果了!

修正后的查询语句

把OR的两个条件用括号括起来,确保c_type = 'Engineering'是对整个搜索条件的前置要求,这样逻辑就完全符合你的预期了:

$query1 = mysqli_query($conn, "SELECT * FROM col_details WHERE c_type = 'Engineering' AND (c_name LIKE '%{$name}%' OR location LIKE '%{$name}%') ");

额外的安全提醒

还有个重要的点要注意:直接把变量$name拼进SQL语句里存在严重的SQL注入风险,这很容易被黑客利用攻击系统。建议改用mysqli的预处理语句来绑定参数,示例代码如下:

// 准备预处理语句
$stmt = mysqli_prepare($conn, "SELECT * FROM col_details WHERE c_type = 'Engineering' AND (c_name LIKE ? OR location LIKE ?)");
// 给搜索关键词加上通配符
$searchTerm = "%{$name}%";
// 绑定参数(两个s表示两个字符串类型的参数)
mysqli_stmt_bind_param($stmt, "ss", $searchTerm, $searchTerm);
// 执行查询
mysqli_stmt_execute($stmt);
// 获取查询结果
$result = mysqli_stmt_get_result($stmt);

这样既解决了逻辑问题,又堵住了安全漏洞,一举两得~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:51:29