你不应该在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'使用的值列表中。 –
所以它不可能? –
我会建议询问另一个问题样本数据和期望的结果,并解释你正在尝试做什么。我会建议修改这个问题,但它现在有一个答案,并且您的更改可能会使答案失效 - 这是无礼的。 –