2013-05-11 80 views
1

我已經查看了一些關於此主題的類似帖子,但是我還沒有找到它們爲我工作。將變量傳遞給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'「

網上的一些答案提到了分割字符串和使用正則表達式。我不確定最好的方法是什麼。如果我不清楚某件事情,請問我會澄清。非常感謝。

回答

1

您正在尋找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

2

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

$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