$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/