赞
踩
我正在重做一些PHP代码以使用PDO进行数据库访问,但是我遇到一个“WHERE … IN”查询的问题。
我试图从数据库中删除一些东西,根据表单上的哪些项目进行检查。列表的长度和内容将有所不同,但是在这个例子中,可以想像这样:
$idlist = '260,201,221,216,217,169,210,212,213';
那么查询如下所示:
$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));
当我这样做时,只有第一个ID被删除。 (我假设它抛出逗号和它之后的所有东西)
我也试过使$ idlist成为一个数组,但是它不会删除任何东西。
在PDO准备语句中使用项目列表的正确方法是什么?
解
edorian的回答为我工作,但我以为我会详细说一下。
首先,每个复选框名称都表示它是数组的一部分:
所以在提交时,我得到一个名为$ _POST [‘foos’]的变量,它是所有复选框的值的数组。
然后我可以这样做:
//As many question marks as array entries; the last one needs no comma
$questionmarks = str_repeat("?,", count($_POST['foos'])-1) . "?";
$query = "DELETE from `employee_customeraccount` WHERE `id` IN ($questionmarks)";
$st = $db->prepare($query);
//Each question mark is filled in with the next item in the array
$st->execute($_POST['foos']);
有用!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。