我正在尝试运行一个包含数组的查询。我破坏了数组,但我不能使用sql IN函数,因为我将使用LIKE函数。所以这就是我想到的解决方案:
$soort = $_POST['soort'];
$st = $db->prepare("SELECT * FROM antwoorden_259 WHERE vraag4 LIKE :soort
AND vraag3 LIKE :merk
AND vraag16 BETWEEN :prijsvan AND :prijstot
AND vraag5 BETWEEN :minkm AND :maxkm
AND vraag8 BETWEEN :vermogenvan AND :vermogentot
AND vraag9 LIKE :brandstof
ORDER BY vraag3 ASC LIMIT 5"
);
$st->bindValue(':soort', implode(" OR ", $soort));
$st->bindValue(':merk', "%%");
$st->bindValue(':prijsvan', $prijs_particulier_van);
$st->bindValue(':prijstot', $prijs_particulier_tot);
$st->bindValue(':minkm', $minkm);
$st->bindValue(':maxkm', $maxkm);
$st->bindValue(':vermogenvan', $vermogenvan);
$st->bindValue(':vermogentot', $vermogentot);
$st->bindValue(':brandstof', $brandstof);
$st->execute();
对不起荷兰语,请忽略绑定值,除了:soort one。基本上我要做的是将我的数组$ soort拆分成这样的字符串:truck或car OR boat,等等。用户可以在不同页面的复选框中选择值。
我似乎无法弄清楚为什么最终查询不起作用,内爆完成了它的事情,当我手动尝试在PHPMyAdmin中使用它时它确实有效。此外,当我选择1复选框时,查询确实有效,但它当我选择第二个时停止工作...
任何人都可以帮助我吗?我可能忘记了一些事情......这是漫长的一天!
HTML:
<li>
<input type="checkbox" value="vrachtwagen" id="check-1" class="checked" name="soort[]">
<label for="check-1" class="">
<span class="flt_lt">Vrachtwagen</span>
<span class="flt_rt">5</span>
<span class="clear"></span>
</label>
</li>
<li>
<input type="checkbox" value="trekker" name="soort[]" id="check-2">
<label for="check-2" class="">
<span class="flt_lt">Trekker</span>
<span class="flt_rt">5</span>
<span class="clear"></span>
</label>
</li>
<li>
<input type="checkbox" value="oplegger" name="soort[]" id="check-3" class="checked">
<label for="check-3" class="">
<span class="flt_lt">Oplegger</span>
<span class="flt_rt">5</span>
<span class="clear"></span>
</label>
</li>
<li>
<input type="checkbox" value="vrachtwagen" name="soort[]" id="check-4" class="checked">
<label for="check-4" class="">
<span class="flt_lt">Aanhanger</span>
<span class="flt_rt">10</span>
<span class="clear"></span>
</label>
</li>
答案 0 :(得分:0)
您的soort
参数已插入查询中,如下所示:
SELECT * FROM antwoorden_259
WHERE vraag4 LIKE 'trekker OR oplegger' [...]
如果我正确地收集了你的目标,你需要将它们分成单独的绑定参数,以便它们像这样插入到查询中:
SELECT * FROM antwoorden_259
WHERE vraag4 LIKE 'trekker'
OR vraag4 LIKE 'oplegger' [...]
当查询具有可变数量的绑定参数时,我发现我需要在准备好的SQL中使用?
使用数字索引参数。
$st = $db->prepare("SELECT * FROM antwoorden_259 WHERE
vraag4 LIKE ?
OR vraag4 LIKE ?
");
$st->bindValue(1, $soort[0]);
$st->bindValue(2, $soort[1]);
(将查询调整为可变数量的参数已留作读者练习。)
如果您的SQL方言支持它,您可以使用类似“LIKE in array”类型的运算符,如PostgreSQL支持:WHERE somecolumn ~~* any(array['%some%', '%someelse']))