为了账号安全,请及时绑定邮箱和手机立即绑定

具有“ WHERE…IN”查询的PDO

具有“ WHERE…IN”查询的PDO

PHP
DIEA 2019-12-02 13:20:29
我正在重新编写一些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)");

然后循环绑定参数。


查看完整回答
反对 回复 2019-12-02
?
慕盖茨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']);`有效!

查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 763 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信