【发布时间】:2016-10-09 17:13:15
【问题描述】:
我正在构建一个带有查询构建器的动态应用程序,该查询构建器由四个选择列表组成,用户可以在其中输入表、列、运算符和属性名称。现在我还希望用户能够选择全部。所以用户应该可以选择只选择表和列名(=ALL)。但是我不知道如何过滤掉 where 子句。这是我目前的 php 脚本:
<?php
include "connect.php";
$table = $_GET['tableSelected'];
$field = $_GET['fieldSelected'];
$attribute = $_GET['attributeSelected'];
$operator = $_GET['operatorSelected'];
$tableList = $_GET['tableList'];
$fieldList = $_GET['fieldList'];
$attributeList = $_GET['attributeList'];
$fieldstr = $fieldList . ",ST_AsGeoJSON(ST_Transform(l.geom,4326))";
$sql = "SELECT $fieldstr
FROM $table l
WHERE $field $operator '{$attribute}'";
if (!$response = pg_query($conn, $sql)) {
echo "A query error occured.\n";
exit;
}
while ($row = pg_fetch_row($response)) {
foreach ($row as $i => $attr){
echo $attr.", ";
}
echo ";";
}
?>
【问题讨论】:
-
动态构建查询字符串,只有在需要的3个字段不为空时才添加
WHERE条件。顺便说一句,您应该用占位符替换该值,并对数据库、表和列名使用白名单,以避免 sql 注入/破坏您的查询。 -
是的,就是这个主意。但是如何做到这一点@jeroen?