传递" WHERE"对php的陈述

时间:2015-01-14 02:45:07

标签: php jquery mysql arrays json

我希望获取几个选择框的值并将它们全部连接到一个数组中以用于形成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';

有关如何使用我当前的代码解决此问题的任何建议都会有所帮助,任何关于更清晰,更好地将此查询放在一起的方法的建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

这是一个问题,我可以在取得更多进展后弄明白这一点:

Create array for PDO from variables passed from jquery

以下是相关部分:

$q = $dbh->prepare("DESCRIBE full_db2");
 $q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN);
$validKeys = $table_fields;
$sql = 'SELECT COUNT(guid) FROM full_db2';
$any_condition = false;
foreach($_GET as $key=>$val) {
   if (!empty($val) && in_array($key,$validKeys)) {
     if ($any_condition) {
       $sql .= ' AND '.$key.' = :'.$key;
     } else {
       $sql .= ' WHERE '.$key.' = :'.$key;
       $any_condition = true;
     }
   }
}

$stmt = $dbh->prepare($sql);

foreach($_GET as $key=>$val) {

if (!empty($val)  && in_array($key,$validKeys)) {
 $stmt ->bindValue(':'.$key, $val, PDO::PARAM_STR);
 }
}

$stmt->execute();

答案 1 :(得分:-1)

在服务器端使用以下代码:

// $whereAttributes = isset($_GET['all_att'])? "{$_GET['all_att']}" : ''; THIS LINE WAS WRONG

 $whereAttributes =$_GET['all_att'];

$age_data=$whereAttributes[0];

$gender_data=$whereAttributes [1];

$age_data_array=explode(','$age_data);

$gender_data_array=explode(',',$gender_data);

$where_clause=trim($age_data_array[0])." = ".trim($age_data_array[0])." AND " .trim($gender_data_array[0])."=".trim($gender_data_array[1]);

$sql = "select count(guid) from full_db2 where ". $where_clause;