如何在sql语句中使用

时间:2015-12-29 00:57:49

标签: php sql sql-like

您好我正在使用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 .= ")";

我收到此错误,即

  

“试图获取非对象的属性”

我无法弄清楚会发生什么任何建议会非常感谢您的时间。

1 个答案:

答案 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说的那样,回显$ 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 . ";";

更新2015年1月9日

我意识到此代码中存在一个错误,当$ followingArray为空时,我们会收到MySQL语法错误,因为查询以“WHERE”结尾。这是一个解决该bug的新版本:

$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 . ";";