PHP/SQL-结合与&;或者在foreach()中
我将json发送到服务器,如下所示:PHP/SQL-结合与&;或者在foreach()中,php,sql,foreach,Php,Sql,Foreach,我将json发送到服务器,如下所示: {"data":{"tags":[{"tag":"Paris"},{"tag":"New York"},{"tag":"London"}]},"terms":{"term":"index"}} 。。。使用foreach()我将提供的标记附加到查询中: $query = "SELECT name FROM accounts WHERE name = '".$term."'"; foreach($tags as $t=>$tag){ $tag
{"data":{"tags":[{"tag":"Paris"},{"tag":"New York"},{"tag":"London"}]},"terms":{"term":"index"}}
。。。使用foreach()我将提供的标记附加到查询中:
$query = "SELECT name FROM accounts
WHERE name = '".$term."'";
foreach($tags as $t=>$tag){
$tag = $tag['tag'];
$query.=" AND city = '".$tag."'";
}
。。。要复制这一点:
SELECT name FROM accounts
WHERE name=$term
AND city=$tag
AND city=$tag
AND city=$tag;
SELECT name FROM accounts
WHERE name=$term
AND (city=$tag OR city=$tag OR city=$tag);
但是,如果我想提供以下内容,foreach()应该是什么样子:
SELECT name FROM accounts
WHERE name=$term
AND city=$tag
AND city=$tag
AND city=$tag;
SELECT name FROM accounts
WHERE name=$term
AND (city=$tag OR city=$tag OR city=$tag);
问题在于,在sql查询中,列名不能同时包含两个标记。比如说
WHERE name = true AND name = false
没有任何意义
所以你应该用这样的东西
WHERE name in ($tag, $term, $tag2);
因此,你也应该修改你的php代码
$first = true;
$query = "SELECT name FROM accounts
WHERE name2 = '$term' and name in ("
foreach($tags as $t=>$tag){
$tag = $tag['tag'];
if($first == false) {
$query.=",";
}
$query.="'".$tag."'";
$first = false;
}
$query.=")";
在查询和函数中使用更好的方法来形成它:
$tags_list = array();
foreach($tags as $t=>$tag){
$tags_list[] = $tag['tag'];
}
$query = "SELECT name FROM accounts
WHERE name = '".$term."'";
if ($tags_list) {
$query .= " AND city IN ('".implode("', '", $tags_list)."')";
}
在中使用
,我会移除foreach,并用array_列替换它,然后内爆。我想帮助他解决问题,因此使用他的编码风格。doe使用内爆绝对有意义实际上有两列。。。我在上面编辑了它。对不起。我应该继续使用in()?name=$term和name in是否有争议?@inxoy我认为问题的作者只是在字段名中弄错了,这不是给我减号的理由。我已经解释了基本原则。$tags_list=$tag['tag'];它不会像你期望的那样工作。它将只生成最后一个标记。@PPM您的查询在形成后是什么样子的?进行echo$查询代码>并将输出复制到这里。好的,现在开始工作。我发现了我的错误。。。我对数组进行了转义:$tags_list=$mysqli->real_escape_string(array());谢谢你在这方面的帮助。希望我在这个问题上不会得到太多的反对票;-)