你不應該在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 . ";";
來源
2015-12-29 01:12:50
Tim
打印'$ sql2',然後將其包含在消息中。問題可能會很明顯。例如,'like'不在'IN'使用的值列表中。 –
所以它不可能? –
我會建議詢問另一個問題樣本數據和期望的結果,並解釋你正在嘗試做什麼。我會建議修改這個問題,但它現在有一個答案,並且您的更改可能會使答案失效 - 這是無禮的。 –