我希望基于for-循环的输出构建一个查询。现在的查询如下所示:
$result = $pdo->query("SELECT {$fields}, ST_AsGeoJSON(geom, 5) AS geojson FROM government_table WHERE '".$gov_where_statement."' {$order}");$gov_where_statement来自于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]."'";
}
}如果有三个政府,我希望将这个问题解释为:
$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'以使查询理解&&-操作符?
发布于 2019-10-15 09:37:21
我通常会使用预先准备的语句来防止SQL注入。因此,我将分别构建一个占位符数组和替换值。此外,由于您希望针对单个列和N个不同的值构建OR条件,所以我认为最好使用IN语法:
<?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);https://stackoverflow.com/questions/58390659
复制相似问题