我有一个复选框过滤器,可以“检查”多个选项。检查完成后,它们将存储在JavaScript数组中,并通过ajax传递给php文件。从那里开始,我正在尝试使用foreach循环来获取数组中的每个元素,并为每个元素的SQL语句添加一个新的where条件,然后运行查询。
的JavaScript
$referred = $_GET['referredby'];
运行的PHP脚本(filter-results.php)
var vendors = [];
function filterResults($this)
{
var vendor = $($this).attr('data-id');
if($($this).prop('checked'))
{
var action = 'add';
vendors.push(vendor);
}
else
{
var action = 'remove';
var index = vendors.indexOf(vendor);
if(index >= 0)
{
vendors.splice(index, 1);
}
}
包含foreach循环的PHP函数
if(is_array($_POST['vendors']))
{
$collaterals = $vendor->updateResults($_POST['vendors']);
var_dump($collaterals);
foreach($collaterals as $col)
{
include '../parts/item.php';
}
}
PHP函数中的'echo'正在运行,但是var_dump()正在变为'NULL',这意味着SQL语句中的某个地方出现了错误。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
您可以在没有foreach
循环的情况下运行查询,如下所示
$sql = "SELECT * FROM collaterals WHERE vendor IN ('".implode("','",$vendors)."')";
答案 1 :(得分:0)
您的查询看起来像
SELECT * FROM collaterals WHERE vendor = x OR vendor = x OR
您必须删除最后一个OR。 另外我建议使用带有implode()php函数的IN子句。
答案 2 :(得分:0)
它将产生" SELECT * FROM抵押品WHERE vendor = 1 OR vendor = 2 OR"
使用"选择* FROM抵押品,其中供应商在(1,2,3)"相反,
答案 3 :(得分:0)
问题:
vendor = item1 OR vendor = item2 OR
(请注意挂起的OR)IN
可获得相同的结果这样做:
$items = array();
$sql = "SELECT * FROM collaterals WHERE vendor IN (".
implode(",",array_fill(0, count($vendors), "?"))
.")";
// $sql would look like e.g. SELECT * FROM collaterals WHERE vendor IN (?,?,?)
$stmt = $this->db->prepare($sql);
$stmt->execute($vendors);
注意:在上面的代码中,所有$vendors
都将被视为字符串,如果您需要将它们绑定为不同的类型,则应在每个数组条目上调用bindParam
或bindValue
< / p>