2014-03-04 34 views
0

我想傳遞一個包含衆多的用戶名,用逗號分隔的字符串,創建一個動態查詢,並想通過它來查詢瞭如何使用「IN」在MySQL

$name_list='kesong,nicholas,jane'; //this value would change 
$select_occupy=mysql_query("SELECT * FROM user_data WHERE `username` IN('$name_list') ORDER BY `occupy_date` ");// i think this would just search for a username which is 'kesong,nicholas,jane', instead searching them seperately 
    echo mysql_num_rows($select_occupy); //would echo 0 

我知道它只是當你指定一個像IN(「$名稱1」,「$名2」,「$ NAME3」),但我需要一個動態的

+0

不要使用mysql_ *功能 - 它們已被棄用 – user4035

+0

依賴於原始名單,數組的格式和源最簡單的,你可以使用implode – 2014-03-04 01:29:32

+0

你是什麼意思?@Dagon –

回答

2

作爲一個建議,牽住你的名字到一個數組中,並做如下圖所示:

$names=array('name1','name2','name3'); 
$namesToCheck=""; 
foreach($names as $name){ 
    $namesToCheck.="'$name',"; 
} 
//to remove the last , 
$namesToCheck=substr($namesToCheck,0,-1); 

現在,你可以把$namesToCheck int o您的IN查詢。

編輯:

在這個答案,這是假定你將防止任何可能的SQL注入作爲當前的回答僅僅是你的問題的想法。執行防止SQL注入的最低建議將使用mysql_real_escape_string函數,該函數會轉義字符串中的特殊字符以用於SQL語句。例如:

$namesToCheck.="'".mysql_real_escape_string($name)."',"; 
//OR DO THIS ON FINAL STRING 

注意,這個擴充已廢棄PHP 5.5.0的。您可以在下面的鏈接看看PHP的官方文檔:

mysql_real_escape_string

+0

我認爲這會檢查username = $ name1 +','+ $ name2 +','+ $ name3,而不是檢查他們username = name1 || username = name2 || username = name3 –

+0

@ user2864740修改;) –

+0

投票反過來:) – user2864740

0

你可以這樣說:

$namesToCheck = "'" .implode("','" ,explode(',' ,$name_list)) ."'"; 

然後查詢的IN子句中使用$namesToCheck

上面的代碼會轉換:

kesong,nicholas,jane 

到:

'kesong','nicholas','jane'