我試圖建立使用PHP和MySQL查詢內容的SQL查詢,介紹如何使用的變量
$query = "select * from products where product_name = '$item_name'";
這個工程時$ ITEM_NAME認爲只有一個名字,而是$ ITEM_NAME是數組和基於用戶的交互可以包含多個名稱,我怎樣才能使查詢運行多個名稱並獲取結果行。
在此先感謝
我試圖建立使用PHP和MySQL查詢內容的SQL查詢,介紹如何使用的變量
$query = "select * from products where product_name = '$item_name'";
這個工程時$ ITEM_NAME認爲只有一個名字,而是$ ITEM_NAME是數組和基於用戶的交互可以包含多個名稱,我怎樣才能使查詢運行多個名稱並獲取結果行。
在此先感謝
這裏是你如何可以建立名稱的安全列表插入IN子句...
if (is_array($names) && count($names))
{
$filter="('".implode("','" array_map('mysql_real_escape_string', $names))."')";
$sql="select * from products where product_name in $filter";
//go fetch the results
}
else
{
//input was empty or not an array - you might want to throw an
//an error, or show 'no results'
}
array_map在通過mysql_real_escape_string運行每個名稱以清理它之後返回名稱的輸入數組。我們使用這個數組來創建一個好的列表來使用IN子句。
您應該始終確保任何數據(特別是直接來自客戶端的數據)在查詢中正確轉義以防止SQL injection攻擊。
$vals = implode(',',$item_name);
$query = "select * from products where product_name in (".$vals.");";
給一個嘗試。
應該是$瓦爾斯= ' 「' .implode( ' 」「',$ ITEM_NAME)。」';爲了有引用值 – Eineki 2009-09-29 13:31:31
+1,但是,鴿子,是正確的消毒數據將是非常有益的。 – 2009-09-29 13:31:41
這不是一個如何構建查詢的好例子 - 對數據進行santizing應該永遠不會被事後考慮,甚至從有啓發性的例子中刪除,以使它們更清晰。 – 2009-09-29 13:42:07
$query = "select * from products where product_name in(";
foreach($item_name as $name)
{
$query .= "'" . $item_name . "', ";
}
$query = substr($query, 0, strlen$query) - 2);
$query .= ");";
第一個答案(由inkedmn)真的是最好的一個,雖然
你有一個很好的機會逃離這裏的字符串;-)然後關閉')'。 – 2009-09-29 13:32:38
是的,不是列表中的最佳答案。 – Natrium 2009-09-29 13:34:44
基於inkedmn的迴應(這並沒有引述的項目名稱):
$query = 'select * from products where product_name in ("' . implode('", "', $item_name) . '")';
儘管你可以使用一個全文搜索更好。
+1,最後一個完整的解決方案。 ;-) – 2009-09-29 13:34:07
爲了讓它更具啓發性,我建議使用'else'從而避免意外;-) – 2009-09-29 13:47:24
好點,完成! – 2009-09-29 14:11:05