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

如何在PHP中实现MySQL IN()函数以适配Flutter应用

PHP预处理语句处理MySQL IN()函数的参数赋值方法

固定两个值的场景

如果确定IN()里只有两个值,直接给预处理语句绑定对应变量即可,以下是两种常用PHP数据库扩展的实现方式:

PDO实现

// 假设已初始化PDO连接实例$pdo
$val1 = '你的第一个值';
$val2 = '你的第二个值';

$sql = "SELECT * FROM `TABLE` WHERE COLUMN IN (?, ?)";
$stmt = $pdo->prepare($sql);
// 直接传入参数数组执行
$stmt->execute([$val1, $val2]);

// 获取查询结果
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

MySQLi实现

// 假设已初始化mysqli连接实例$conn
$val1 = '你的第一个值';
$val2 = '你的第二个值';

$sql = "SELECT * FROM `TABLE` WHERE COLUMN IN (?, ?)";
$stmt = $conn->prepare($sql);
// 绑定参数:第一个参数是类型标识(s=字符串,i=整数,d=浮点数),后续是对应变量
$stmt->bind_param("ss", $val1, $val2);
$stmt->execute();

// 获取查询结果
$result = $stmt->get_result();
$results = $result->fetch_all(MYSQLI_ASSOC);

动态数量值的场景(可选)

如果后续可能需要处理更多值,可以动态生成占位符,避免硬编码数量:

PDO实现

// 假设参数数组
$values = ['值1', '值2'];
// 生成对应数量的?占位符
$placeholders = implode(',', array_fill(0, count($values), '?'));
$sql = "SELECT * FROM `TABLE` WHERE COLUMN IN ($placeholders)";

$stmt = $pdo->prepare($sql);
$stmt->execute($values);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

MySQLi实现

// 假设参数数组
$values = ['值1', '值2'];
$placeholders = implode(',', array_fill(0, count($values), '?'));
$sql = "SELECT * FROM `TABLE` WHERE COLUMN IN ($placeholders)";

$stmt = $conn->prepare($sql);
// 生成对应数量的类型标识
$types = str_repeat('s', count($values));
// 动态绑定参数
call_user_func_array([$stmt, 'bind_param'], array_merge([$types], $values));

$stmt->execute();
$result = $stmt->get_result();
$results = $result->fetch_all(MYSQLI_ASSOC);

注意事项

  • 占位符数量必须和参数数量严格对应,否则会执行失败
  • 绑定参数时要匹配字段类型,比如整数类型用i代替s,避免类型转换问题
  • 预处理语句能有效防范SQL注入,不要直接将变量拼接进SQL语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:42:40