嗨,我正在使用PHP尝试从数据库中检索数据,同时循环通过in语句中的数组,如下所示。
$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 .= ")";
我收到这个错误,上面写着
"尝试获取非对象的属性"
我不知道发生了什么。如果有任何建议,我将不胜感激。谢谢你抽出时间。
您不应该在in子句中使用LIKE,但您确实需要逗号分隔元素。也不需要记录计数。foreach将在数组被遍历后停止,您可以修剪掉后面的逗号。
$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE FavorIDs IN (" ;
foreach($followingArray as $value)
{
$sql2 .= "'".$value."', ";
}
$sql2 = rtrim($sql2,',');
$sql2 .= ");";
如果失败,就像Gordon所说的那样,回显$sql2,语法错误可能会很清楚。
如果确实需要使用LIKE和通配符匹配,可以附加多个OR子句,每个$value一个OR子句。
$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE " ;
$whereClause = "";
foreach($followingArray as $value)
{
$whereClause .= " OR FavorIDs LIKE '%".$value."%' ";
}
$whereClause = ltrim($whereClause, " OR");
$sql2 .= $whereClause . ";";
更新1/9/15
我意识到这段代码中有一个错误,当$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 . ";";