2012-07-20 114 views
0

我正在製作一個搜索框,用於訪問SOQL salesforce數據庫中的數據。到目前爲止,我有這樣的:SOQL查詢,爲多個查詢制定查詢

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var'";

這工作完全正常。但是,如何讓我們說$var可能是電話號碼。所以,如果它不匹配的第一個名字,搜索在電話號碼匹配等

回答

1

被退回。 %是通配符佔位符。

+0

我也同意Dreaded的帖子在下面,你要清理$ var來防止SQL注入。如果這是在一個封閉的內部網上,那麼你可能不必擔心,但這是一個好習慣。 – 2012-07-20 02:19:26

+0

不錯!謝謝。儘管%$ var%有一個問題,即使它是空的,我也會得到所有結果。有沒有辦法告訴它var必須至少不是空的?編輯:其實我遇到了另一個問題。當我使用或者我沒有得到任何結果時:S – 2012-07-20 02:30:02

+0

您可能需要爲此驗證一個javascript驗證,以便在實際將數據發送到服務器之前,如果用戶沒有輸入任何內容,則會發出警報。檢查了這一點:http://www.w3schools.com/js/js_form_validation.asp – 2012-07-20 02:34:40

1

這應該檢查是否有匹配在頭名姓或沒有比賽,但在手機找到匹配

$var=mysql_real_escape_string($var); //protect your sql entries from sql injection, make sure to validate 
$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR (FirstName !='$var' AND Phone='$var') "; 

或者如果您不介意這裏或那裏是否匹配,您可以使用or。使用

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName LIKE '%$var%' OR Phone LIKE '%$var%'"; 

LIKE而不是=可以匹配名稱的部分,例如搜索DAV將導致大衛和戴夫斯都:這試試,這是更好的性能方面比以前的查詢

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR Phone='$var' "; 
+0

謝謝你的回答。無論出於什麼奇怪的原因,或者不適合我。如果我只有一個搜索元素,那麼它可以工作,但如果我使用兩個,它不起作用。我也確保我正在尋找的領域存在。 – 2012-07-20 02:34:26

+0

你可以發佈$ var的示例,即使它存在於db中也不起作用嗎? '='完全匹配,'Like'%%''將使用wildcat匹配。所以在上面的答案中,字符串需要完全匹配。如果它是db中的'abcd',那麼只有'abcd'匹配,而不是'abcd',而且'abc'沒有空格。還要確保驗證'$ var'。如果它是空的,那麼不要搜索它。例如$ var = trim($ var);那麼'if(!empty($ var))' – 2012-07-20 02:39:21

+0

哦,我找到了原因。使用mysql真正的轉義字符串沒有爲查詢工作的一些原因!是因爲我在使用SOQL嗎? – 2012-07-20 02:41:16