将变量传递给sql WHERE IN子句

问题描述:

我已经查看了一些关于此主题的类似帖子,但是我还没有找到它们为我工作。将变量传递给sql WHERE IN子句

我有一个复选框列表,它将文章ID保存为一个值。这意味着当用户选中一个复选框时,这些id将被存储为一个字符串并发送给处理程序(如下所示:“blah,blah,blah”)。我稍后将从数据库中删除ID。

我的SQL语句看起来是这样的: “(。$ _ GET [ 'art_id'] ”)“ 从文章,其中art_id中删除”

当然,这并不工作,因为$ _GET [ 'art_id']看起来像“blah,blah,blah,blah”而不是''blah','blah','blah','blah'“

网上的一些答案提到了分割字符串和使用正则表达式。我不确定最好的方法是什么。如果我不清楚某件事情,请问我会澄清。非常感谢。

您正在寻找implode功能

See here

+0

谢谢,Manu。我做了一个快速编辑,提到当它到达处理程序时,它是一个字符串,所以在将其插入sql语句之前,它看起来像是“blah,blah,blah”。 – tickerll 2013-05-11 07:20:37

+0

如果它和'id',它不应该是一个整数? – Manu 2013-05-11 07:22:48

+0

是的,它是一个整数,我在将它插入到sql语句之前也强制(int),但是当我使用var_dump调试它然后死掉时,它会显示引号。我按照上面的方式将它连接起来,也许这就是问题所在?另外,当我让处理程序运行(删除死亡)时,它只删除一个帖子,而不是所有被检查的帖子。 – tickerll 2013-05-11 07:28:25

消毒,爆然后插入字符串:

$ids = array(); 
$in = ''; 
if(isset($_GET['art_id']){ 
    foreach($_GET['art_id'] as $id){ 
    $ids[] = intval($id); 
    } 
    $in = implode(',', $ids); 
} 

$query = "delete from article where art_id in (".$in.")"; 

你可能想要做额外的检查的情况下,其中$ _GET ['art_id ']是空的,就像提供一个默认值或只有当您有ID时才进行查询

+0

谢谢,达米安。我想出了解决方案,但现在我正在努力解决类似的问题,但是用字符串。我需要“blah,blah,blah”看起来像''blah','blah','blah'“。在这种情况下,它已经是一个字符串了,所以implode是没有必要的。而且我不能在sql语句中插入一个数组。如果你知道如何解决这个问题,你的帮助将非常感谢! – tickerll 2013-05-11 07:43:16

+0

这是另一个问题,无论如何,这个原则是相似的 – 2013-05-11 08:00:58