【发布时间】:2015-01-14 02:45:07
【问题描述】:
我希望获取几个选择框的值并将它们全部连接到一个数组中以用于形成一个 mySQL 查询。该数组包含WHERE 语句的键和值。我正在制作这样的数组:
var allvars = [];
$('#more_rows').click(function(){
var onevar = $('#first_select option:selected').text();
var twovar = $('#second_select option:selected').text();
allvars.push(onevar + "," + twovar );
});
这最终给了我一个这样的数组:
["age , 29", "gender, male"]
问题是...我如何将其输入 PHP 以返回计数?我正在处理这样的事情。
jQuery:
$.ajax({
url: 'att_count.php',
type: 'GET',
dataType: 'JSON',
data: {all_att: allvars},
success: function(data) {
//code to display count
}
});
PHP(相关部分):
$whereAttributes = isset($_GET['all_att'])? "{$_GET['all_att']}" : '';
$whereAttributes = mysql_real_escape_string($whereAttributes);
$sql = "select count(guid) from full_db2 where {$whereAttributes};";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result);
当然,这是行不通的,并给我这样的错误日志:
Call to a member function fetchAll() on a non-object in ../att_count.php on line 14(即上面 PHP 中以$sql 开头的那一行)。
我确信总体上有一些更好的方法可以做到这一点,但这是我第一次尝试。目标是能够将“无限”数量的键/值对传递到 PHP 中,以返回具有该键/值组合的所有记录的 COUNT。假设现在所有的连接都是“AND”......所以最终的查询应该是这样的,使用上面的数组:
SELECT COUNT(guid) FROM full_db2 WHERE age = '25' AND gender = 'male';
任何关于如何使用我当前的代码来解决这个问题的建议都会有所帮助,任何关于更清洁、更好的方式来组合这个查询的建议都将不胜感激。
【问题讨论】:
-
无论你做什么,都不要在 Javascript 中构造你的
WHERE子句,并让 PHP 未经编辑地将它传递给 MySQL——这就是 SQL 注入的路径。使用 PHP 验证键/值对并根据结果在 PHP 中构建您的WHERE子句。 -
我认为我正在按照您的建议进行操作。我只是将 URL 中的属性传递给 PHP,然后它就形成了
WHERE子句。我还添加了mysql_real_escape_string。看看我上面的代码,如果我做得正确,请告诉我。 -
您的代码从
$_GET['all_att']中取出原始值并将其直接插入到 SQL 查询中。你需要检查你是否有你接受的键和有意义的值,然后从中组装一个查询。 -
@HoboSapiens 键和值直接来自数据库,因为我的选择是从数据库动态生成的。那么,假设是这种情况,我该如何构造一个合适的查询呢?
标签: php jquery mysql arrays json