我正在重新编写一些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准备好的语句中使用项目列表的正确方法是什么?
3 回答
BIG阳
TA贡献1859条经验 获得超6个赞
由于您无法将值(数字)与控制流逻辑(逗号)与准备好的语句混合使用,因此每个值需要一个占位符。
$idlist = array('260','201','221','216','217','169','210','212','213');
$questionmarks = str_repeat("?,", count($idlist)-1) . "?";
$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");
然后循环绑定参数。
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
解决方案:<input type="checkbox" name="foos[]" value="bar">
提交后,我得到一个名为的变量$_POST['foos']
,它是所有复选框的值的数组。然后://与数组条目一样多的问号;最后一个不需要逗号, $questionmarks = str_repeat("?,", count($_POST['foos'])-1) . "?"; $query = "DELETE from
employee_customeraccount`在哪里id
($ questionmarks)“; $ st = $ db-> prepare($ query); //每个问号都用数组$ st-> execute( $ _POST ['foos']);`有效!
- 3 回答
- 0 关注
- 763 浏览
添加回答
举报
0/150
提交
取消