2016-03-04 99 views
1

所以,我下面的PHP查詢:MySQL查詢搜索以「如果」語句

for($i = 0; $i < sizeof($cat_result) ; ++$i) {   
    $query_p = "SELECT * FROM $table WHERE id = %d"; 
    $results[] = $wpdb->get_row($wpdb->prepare($query_p, $cat_result[$i]));    
} 

搜索依賴於$cat_result其中包含大量的數字。

例如,讓我們說$cat_result包含以下號碼:「1,3,5,21,35`

使用這些5個號碼,查詢將查找數據庫信息。

但是,有些情況下db中不存在一些數字(例如「21」)。

然後,我得到PHP NOTICE: trying to get property of non-object

如何編寫「if」語句,以便如果id(本例中爲「21」)不存在,那麼它只是忽略查詢? (很難解釋我的意思是「忽略」,我仍然希望查詢執行搜索,但是如果它沒有找到它正在查找的內容,那麼只需忽略該錯誤)。

+2

爲什麼不直接說:'SELECT * FROM $ table WHERE id in($ cat_result);' – Fallenreaper

+1

@Matt'IFNULL'沒有幫助,如果沒有行匹配。 – Barmar

+0

@Barmar Ahh,那時可能是錯誤的。 – Matt

回答

1

試試這個:

for($i = 0; $i < sizeof($cat_result) ; ++$i) {   
    $query_p = "SELECT * FROM $table WHERE id = %d"; 
    $row = $wpdb->get_row($wpdb->prepare($query_p, $cat_result[$i])); 
    if ($row) { 
     $results[] = $row; 
    }  
} 

我不知道WordPress的,但我懷疑get_row返回false當有結果沒有更多的行。當發生這種情況時,您的代碼將false置入$results,隨後代碼嘗試將其用作對象。

3

我認爲你應該重組你的查詢。這樣一來,只要你的數據消毒(以防止注射作爲即時通訊不知道,如果它來自用戶或沒有),你可以做到以下幾點:

$cat_result = implode(",", $cat_result); 
$query_p = "SELECT * FROM $table WHERE id in ($cat_result)"; 
$rslt  = $wpdb->get_results($query_p); 
// loop result 

這樣的話,它會讀取你的所有在那個列表中。

+0

'$ cat_result'是一個數組,而不是一個字符串。 – Barmar

+0

您需要使用'implode(',',$ cat_result)'。 – Barmar

+1

使用'$ cat_result = implode(「,」,$ cat_result); ' – Matt