具有“ WHERE…IN”查询的PDO

我正在重新编写一些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准备好的语句中使用项目列表的正确方法是什么?


DIEA
浏览 764回答 3
3回答

BIG阳

由于您无法将值(数字)与控制流逻辑(逗号)与准备好的语句混合使用,因此每个值需要一个占位符。$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

解决方案:<input type="checkbox" name="foos[]" value="bar">提交后,我得到一个名为的变量$_POST['foos'],它是所有复选框的值的数组。然后://与数组条目一样多的问号;最后一个不需要逗号,&nbsp;$questionmarks = str_repeat("?,", count($_POST['foos'])-1) . "?"; $query = "DELETE from&nbsp;employee_customeraccount`在哪里id($ questionmarks)“; $ st = $ db-> prepare($ query); //每个问号都用数组$ st-> execute( $ _POST ['foos']);`有效!
打开App,查看更多内容
随时随地看视频慕课网APP