如何在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
相关产品推荐
相关产品推荐

