php数组转入mysql select查询

标签 php mysql

$multiples_names 是一个数组。

例如$multiple_names = ['1','2','3','4'];

如何将它传递给 php mysql 查询,以便我可以选择与该数组相关的所有项目。

$multiple_names = $_POST['multiple_names'];  

$multiple_names_array = implode(',', $multiple_names);

$stmt1 = $conn->prepare("SELECT * from attendance where name in (?) and today_date between ? and ? order by id ASC");

$stmt1->execute(array($multiple_names_array, $checkInDateFinal, $checkOutDateFinal));

我希望查询结果看起来像这样

Names   Product
1       Product A
1       Product A
2       Product B
3       Product C
3       Product C
4       Product D

尝试了很多方法,还是得不到我想要的结果。

最佳答案

您可以根据$multiple_names_array 的大小创建占位符。您永远不应该像在代码中那样将值直接放入查询中,因为(如注释中所述)您很容易受到 SQL 注入(inject)的攻击。我还将所有值放入一个数组中。

这就是您正在寻找的解决方案。所有值均绑定(bind)

//Assuming the names are separated by commas, e.g "John,Jack,Jill';
$multiple_names = $_POST['multiple_names'];  
$multiple_names_array = explode(',',$multiple_names);

$placeholders = implode(', ',  array_fill(0, count($multiple_names_array), '?'));

//Put all values into one array.
$arguments = array_merge(array(), $multiple_names_array);
array_push($arguments, $checkInDateFinal);
array_push($arguments, $checkOutDateFinal);

// SELECT * FROM attendance WHERE name IN (?, ?, ?, ?, etc...) AND today_date BETWEEN ? AND ? ORDER BY id ASC
$stmt1 = $conn->prepare("SELECT * from attendance where name in ($placeholders) and today_date between ? and ? order by id ASC");
$stmt1->execute($arguments);

关于php数组转入mysql select查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45562245/

相关文章:

PHP 重定向用户(如果已登录)

php - 如何减去数组的值但仍处于位置

php - 为搜索词提供黄色背景色

php - pcre.backtrack_limit 的 "unit"是什么?

mysql - Hibernate QuerySyntaxException,表未映射

c# - 将 Windows Phone 7 应用程序中的图像文件上传到 PHP

php - MySQL 表中不同值的计数未正确添加

Mysql 死锁 - 事务是否正在等待它持有的锁?

php - 将用户数据存储在 $_SESSION 中与重复的数据库访问

sql - 从 MySQL 迁移到任意符合标准的 SQL2003 服务器