如何在php中连接字符串和OR运算符?

如何在php中连接字符串和OR运算符?,php,postgresql,logical-operators,Php,Postgresql,Logical Operators,我想基于for循环的输出构建一个查询。查询现在如下所示: $result = $pdo->query("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table WHERE '".$gov_where_statement."' {$order}"); 而$gov\u where\u语句来自for循环: for ($i=0; $i<count($gov)-1; $i++){ $gov_wh

我想基于for循环的输出构建一个查询。查询现在如下所示:

$result = $pdo->query("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table WHERE '".$gov_where_statement."' {$order}");
$gov\u where\u语句
来自for循环:

for ($i=0; $i<count($gov)-1; $i++){
    $gov_where_statement .="government='".$gov[$i]."' "&&" ";
}

for ($i=0; $i<count($gov); $i++){
  if( !next( $gov ) ) {
      $gov_where_statement .="government='".$gov[$i]."'"; 
   }
}
问题出现在带有“&&”的for循环的第一部分。将var_dump($gov_where_语句)放在for循环之后返回11government='third',其中11来自带有&&运算符的for循环。如果有四个政府,它看起来会是:111government='fourth'

如何生成
government='first'&&government='second'&&government='third'
,以便查询理解&&&operator?

您可以使用它来解决:

$gov_where_statement = [];

for ($i=0; $i<count($gov)-1; $i++){
    $gov_where_statement[] = "government='{$gov[i]}'";
}

$gov_where_statement = join(' OR ', $gov_where_statement);
$gov_其中_语句=[];

对于($i=0;$i),我通常会使用prepared语句来阻止。因此,我会分别构建占位符和替换值的数组。此外,由于您希望针对单个列和N个不同的值构建OR条件,我认为最好在
语法中使用


首先,您需要在字符串中添加
&
。现在,您实际上正在关闭字符串,添加
&
,然后再添加另一个字符串。此外,您说您想要
,但
&
是一个
。将其更改为:
$gov\u where\u语句=“government=”$gov[$i]。“或”;
。但是,您确实应该考虑使用占位符来使用准备好的语句,而不是直接将值注入查询中。在查询中使用
而不是
&
。@Magnueriksson是的,我在最后一分钟更改为&&但正确的方法是使用或,正如您编写的那样。不过,我还必须更改q从“.$gov_where_statement.”到{$gov_where_statement}。这就解决了问题。我会按照建议使用占位符来避免SQL注入。非常感谢!我不建议任何人使用这种技术。你能解释原因吗?我建议使用重复页面中的内容。嗯,这种方法非常好,只要你控制正在使用的数据,就不会出现错误安全问题。没错。但由于我们不知道givend数据的来源,我写了关于sql注入的问题。
$gov_where_statement = [];

for ($i=0; $i<count($gov)-1; $i++){
    $gov_where_statement[] = "government='{$gov[i]}'";
}

$gov_where_statement = join(' OR ', $gov_where_statement);