2015-12-29 109 views
1

您好我正在使用PHP嘗試從數據庫中檢索數據,同時循環訪問像這樣的語句中的數組。如何在sql語句中使用like

$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE FavorIDs IN (" ; 
    $count = 0; 
foreach($followingArray as $value) 
{ 
    if($count==count($followingArray)-1) 
    { 
     $sql2 .= "LIKE"; 
     $sql2 .= "%'".$value."'%"; 
    } 
    else 
    { 
     $sql2 .= "LIKE"; 
     $sql2 .= "%'".$value."'%,";   
    } 
    ++$count; 
} 
$sql2 .= ")"; 

我得到這個錯誤,寫着

「試圖獲得非對象的屬性」

我無法弄清楚什麼是對什麼建議會是多少感謝您的時間。

+0

打印'$ sql2',然後將其包含在消息中。問題可能會很明顯。例如,'like'不在'IN'使用的值列表中。 –

+0

所以它不可能? –

+0

我會建議詢問另一個問題樣本數據和期望的結果,並解釋你正在嘗試做什麼。我會建議修改這個問題,但它現在有一個答案,並且您的更改可能會使答案失效 - 這是無禮的。 –

回答

1

你不應該在IN子句中使用LIKE,但你需要用逗號分隔元素。無需跟蹤計數。遍歷數組時,foreach將停止,您可以修剪尾隨的逗號。

$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE FavorIDs IN (" ; 
foreach($followingArray as $value) 
{ 
     $sql2 .= "'".$value."', ";   
} 
$sql2 = rtrim($sql2,','); 
$sql2 .= ");"; 

如果失敗,就像Gordon說的那樣,echo $ sql2並且語法錯誤可能會很明顯。

如果確實需要使用LIKE和通配符匹配,則可以附加多個OR子句,每個$子句一個。

$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE " ; 
$whereClause = ""; 
foreach($followingArray as $value) 
{ 
     $whereClause .= " OR FavorIDs LIKE '%".$value."%' ";   
} 
$whereClause = ltrim($whereClause, " OR"); 
$sql2 .= $whereClause . ";"; 

更新15年1月9日

我意識到有這個代碼,當$ followingArray是空的,我們會得到一個MySQL語法錯誤的錯誤,因爲該查詢使用「WHERE結束」。這是一個解決該錯誤的新版本:

$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages" ; 
if(count($followingArray) >= 1) { 
    $sql2 .= " WHERE"; 
} 
$whereClause = ""; 
foreach($followingArray as $value) 
{ 
     $whereClause .= " OR FavorIDs LIKE '%".$value."%' ";   
} 
$whereClause = ltrim($whereClause, " OR"); 
$sql2 .= $whereClause . ";"; 
+0

謝謝大家,這非常有幫助:) –

+0

樂意幫忙!祝你好運。 – Tim