首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串与php中的OR-操作符连接起来?

如何将字符串与php中的OR-操作符连接起来?
EN

Stack Overflow用户
提问于 2019-10-15 08:46:13
回答 2查看 165关注 0票数 0

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

代码语言:javascript
复制
$result = $pdo->query("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table WHERE '".$gov_where_statement."' {$order}");

$gov_where_statement来自于for-循环:

代码语言:javascript
复制
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]."'"; 
   }
}

如果有三个政府,我希望将这个问题解释为:

代码语言:javascript
复制
 $result = $pdo->query("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table WHERE government='first' && government='second' && government='third' {$order}");

在for-循环的第一部分出现了"&&“的问题。在for-循环之后放置一个var_dump($gov_where_statement)返回11 11government='third‘,其中11来自于具有&&-操作符的for-循环。如果有四个政府的话,看起来应该是:111级政府=“第四届政府”。

如何生成government='first' && government='second' && government='third'以使查询理解&&-操作符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-15 09:37:21

我通常会使用预先准备的语句来防止SQL注入。因此,我将分别构建一个占位符数组和替换值。此外,由于您希望针对单个列和N个不同的值构建OR条件,所以我认为最好使用IN语法:

代码语言:javascript
复制
<?php

// build a placeholder array [':gov1', ':gov2', ... ':govN']
$keys = array_map(function ($key) {
  return ':gov' . $key;
}, range(1, sizeof($gov)));

// build a value array [':gov1' => $gov[0], ':gov2' => $gov[1], ... ':govN' => $gov[n-1]]
$values = array_combine($keys, $gov);

// form the SQL statement with placeholder for prepare
// i.e. WHERE government IN (:gov1, :gov2, ... :govN)
$where_clause = !empty($gov) ? 'WHERE government IN (' . implode($keys, ', ') . ')' : '';

// prepare the statement
$stmt = $dbh->prepare("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table {$where_clause} {$order}");

// execute the prepared statement with the values
$result = $stmt->execute($values);
票数 0
EN

Stack Overflow用户

发布于 2019-10-15 09:14:22

您可以使用加入()来解决它:

代码语言:javascript
复制
$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);

请注意,您的整个代码可能容易受到SQL注入攻击的影响。考虑使用PDO准备的报表代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58390659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档