2015-12-29 106 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