2012-05-02 60 views
0

我知道如何使用例如WHERE字執行mysql搜索。但我的問題是我需要搜索不同的值,但這些值可能會有所不同。例如:Mysql - PHP不同值搜索

我可以搜索3個變量姓名,姓氏,年齡 但是 我在其他搜索中,我可以查找2個變量名稱,年齡。

有沒有辦法使用相同的腳本執行MYSQL搜索,無論我搜索的值的數量是多少?

Ot「強制」搜索固定數量的變量是一種更好的做法。

謝謝。

羅伯託

回答

0

恕我直言,那最好是將搜索範圍限制到一個固定數量的變量。這樣,您就某個具體原因回答具體問題,而不是試圖對您的具體問題進行一般性回答。限制搜索條件使得語句更易於調試和性能基準。

希望這會有所幫助。

+0

什麼意思是恕我直言。 –

+0

在我的拙見 – geoB

0

只需使用一個變量作爲您的搜索參數並將其插入到您的查詢中即可。只要確保在函數/方法,你把變量放到正確的格式(這將取決於你如何選擇不同的值。)

SELECT * 
FROM db 
$variable; 

不會有WHERE條款看出,除非它是通過你的價值觀(這意味着你可以使用這個相同的查詢來進行數據庫的一般搜索),而不用擔心有空/必填的$variable

你的$variable構造時將需要在其中有WHERE子句,然後你添加的每個值,插入它(在一個循環或許)以適當的格式。

希望這是有道理的,如果不讓我知道,我會盡力澄清。這是相同的方法,大多數人分頁時(除非他們把變量在LIMIT而不是WHERE)的使用

編輯:

還要確保注射前正確過濾您的變量。動態構建查詢

+0

是的,我明白......很好的解釋。我會試試這個..謝謝。 –

0

簡單的例子:

$conditions = array(); 

if (...) { 
    $conditions['age'] = $age; 
} 
if (...) { 
    $conditions['name'] = $name; 
} 
... 

if (!$conditions) { 
    die('No conditions supplied'); 
} 

// if you're still using the mysql_ functions and haven't done so before: 
$conditions = array_map('mysql_real_escape_string', $conditions); 

foreach ($conditions as $field => &$value) { 
    $value = "`$field` = '$value'"; 
} 

$query = 'SELECT ... WHERE ' . join(' AND ', $conditions); 

這真的不是很難動態地湊齊要創建準確的查詢。只需要小心,不要搞亂SQL語法,或打開自己注入更多的漏洞。您可能需要查看數據庫抽象層,這幾乎可以讓您將$conditions數組傳遞給一個函數,該函數將構建實際的查詢,或多或少以上述方式完成。

+0

這段代碼看起來很有趣......我會試着按照你的意思去做。非常感謝你。! –