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

如何在MySQL中查询country字段匹配指定字符串中子串的行?

从MySQL中查询符合指定国家列表的行

需求:从proxylist表中获取所有country字段值属于偏好国家列表的行,偏好国家列表存储在变量$pref_country中。

原代码问题

你的原SQL逻辑错误,LIKE '%$pref_country%'是判断country字段是否包含整个偏好列表字符串,这和实际需求完全相反。同时直接将变量拼接进SQL语句存在SQL注入风险,生产环境中严禁这么做。

原代码:

$pref_country = 'AU-Australia,CA-Canada,ES-Spain,GB-United Kingdom';
$rowRes = mysqli_query($mydb, "SELECT * FROM `proxylist`  WHERE `country` LIKE `%$pref_country%`");

while($row = mysqli_fetch_array($rowRes)) {
    echo $row ['country'] . '<br/>';    
}

修正方案

方案1:使用FIND_IN_SET函数

利用MySQL的FIND_IN_SET函数,直接判断country值是否在逗号分隔的偏好列表中,搭配预处理语句避免注入:

$pref_country = 'AU-Australia,CA-Canada,ES-Spain,GB-United Kingdom';
// 构建预处理查询
$query = "SELECT * FROM `proxylist` WHERE FIND_IN_SET(`country`, ?)";
$stmt = mysqli_prepare($mydb, $query);
// 绑定参数
mysqli_stmt_bind_param($stmt, 's', $pref_country);
mysqli_stmt_execute($stmt);
$rowRes = mysqli_stmt_get_result($stmt);

while($row = mysqli_fetch_array($rowRes)) {
    echo $row['country'] . '<br/>';    
}

方案2:拆分列表用IN条件

将偏好列表拆分为数组,生成IN语句的占位符,再通过预处理绑定参数,适合数据量较大的场景:

$pref_country = 'AU-Australia,CA-Canada,ES-Spain,GB-United Kingdom';
// 拆分字符串为国家数组
$countries = explode(',', $pref_country);
// 生成对应数量的占位符
$placeholders = implode(',', array_fill(0, count($countries), '?'));
// 构建IN条件的预处理SQL
$query = "SELECT * FROM `proxylist` WHERE `country` IN ($placeholders)";
$stmt = mysqli_prepare($mydb, $query);
// 绑定所有国家参数
mysqli_stmt_bind_param($stmt, str_repeat('s', count($countries)), ...$countries);
mysqli_stmt_execute($stmt);
$rowRes = mysqli_stmt_get_result($stmt);

while($row = mysqli_fetch_array($rowRes)) {
    echo $row['country'] . '<br/>';    
}

原表数据

SL_INDEXIP_PORTCOUNTRY_NAME
100002IP:PORTAU-Australia
100003IP:PORTCA-Canada
100004IP:PORTFR-France
100005IP:PORTAU-Australia
100006IP:PORTES-Spain
100007IP:PORTGB-United Kingdom
100008IP:PORTES-Spain
100009IP:PORTUS-United States

执行结果

两种方案都会返回FR-France和US-United States之外的所有行,即符合偏好列表的国家记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:59