如何在 in sql 语句中使用 like
How to use like in an in sql statement
您好,我正在使用 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 .= ")";
我收到这个错误,上面写着
"trying to get property of non object"
我不知道发生了什么任何建议将不胜感激感谢您的时间。
您不应在 IN 子句中使用 LIKE,但您确实需要用逗号分隔元素。也不需要跟踪计数。 foreach 将在遍历数组后停止,您可以 trim 关闭尾随逗号。
$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE FavorIDs IN (" ;
foreach($followingArray as $value)
{
$sql2 .= "'".$value."', ";
}
$sql2 = rtrim($sql2,',');
$sql2 .= ");";
如果失败,如 Gordon 所说,回显 $sql2,语法错误可能会很清楚。
如果您确实需要使用 LIKE 和通配符匹配,您可以附加多个 OR 子句,每个 $value 一个。
$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 . ";";
您好,我正在使用 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 .= ")";
我收到这个错误,上面写着
"trying to get property of non object"
我不知道发生了什么任何建议将不胜感激感谢您的时间。
您不应在 IN 子句中使用 LIKE,但您确实需要用逗号分隔元素。也不需要跟踪计数。 foreach 将在遍历数组后停止,您可以 trim 关闭尾随逗号。
$sql2 = "SELECT * FROM pixacour_pixacourt.UserCaseMessages WHERE FavorIDs IN (" ;
foreach($followingArray as $value)
{
$sql2 .= "'".$value."', ";
}
$sql2 = rtrim($sql2,',');
$sql2 .= ");";
如果失败,如 Gordon 所说,回显 $sql2,语法错误可能会很清楚。
如果您确实需要使用 LIKE 和通配符匹配,您可以附加多个 OR 子句,每个 $value 一个。
$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 . ";";