2
有一個POST請求將一組用戶ID傳遞給PHP腳本。此集合正在與'user_table'中的現有ID進行比較。MySQL - 高效地交叉引用一組ID
這是通過將一個ID數組連接到一個字符串中實現的,並且在查詢中直接使用由逗號分隔的id的結果字符串。
我擔心這不會很好地擴展,並可能是一場災難!任何人都可以分享一些關於這種問題的傳統方法的智慧嗎?
$id_json_array = postVar('u');
$user_ids = json_decode($id_json_array);
$str_ids = join(',', $user_ids);
$result = mysql_query(
"SELECT u.user_id AS i
, u.user_name AS u
FROM user_table u
WHERE u.user_id IN ($str_ids)"
) or die (mysql_error());
的ID陣列將可能幾千,而「USER_TABLE」大(幾萬或幾十萬,索引等)
在此先感謝。
到目前爲止,您最*的問題是SQL注入的風險!你真的應該使用[prepared statements](http://stackoverflow.com/a/60496/623041),將你的變量作爲參數傳遞給它,而這些參數不會被SQL評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables]的故事(http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain) 。 – eggyal
另外,請停止使用古老的MySQL擴展來編寫新代碼:它不再被維護,並且社區已經開始[棄用過程](http://news.php.net/php.internals/53799);您可以使用改進的[MySQLi](http://php.net/mysqli)擴展或[PDO](http://php.net/pdo)抽象層。 – eggyal
儘管代碼中其他地方正在對輸入進行消毒,但我同意使用準備好的語句是最佳做法。 – pjama