从jquery传递的变量为PDO创建数组

这是我现在从我的数据库获取计数的PHP代码:

$hostname = '****'; $username = '****'; $password = '****'; try { $dbh = new PDO("mysql:host=$hostname;dbname=firstdb", $username, $password); echo 'Connected to database
'; $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*** some example variables ***/ $firstpara = 'age'; $secondpara = 'marital_status'; $thirdpara = 'gender'; $data = array($firstpara=>55, $secondpara=>'single', $thirdpara=>'male'); /*** prepare the SQL statement ***/ $stmt = $dbh->prepare("SELECT COUNT(guid) FROM full_db2 WHERE {$firstpara} = :{$firstpara} AND {$secondpara} = :{$secondpara} AND {$thirdpara} = :{$thirdpara}"); $stmt->execute($data); $count =$stmt->fetch(); echo json_encode($count); /*** close the database connection ***/ $dbh = null; } catch(PDOException $e) { echo $e->getMessage(); }

这成功地为我提供了JSON,其中包含数据库中具有上述变量中​​设置的属性的用户数($ firstpara,$ secondpara,$ thirdpara)。

当然,这都是硬编码的,我想要做的是让用户从包含不同属性选项(例如,婚姻状况,性别)的选择框中挑选,并在此基础上为他们提供第二个选择中可能的值选项(例如,单身)。 我动态生成这些选择框没有问题,可以将选择存储为变量。 我可以将它们传递给AJAX发送到PHP文件,但我不知道如何一起解析它们。 像这样发送变量。 var para1 =“male”; //这是从选择值中捕获的//选择了更多属性

 $.ajax({ url: 'all_get_2.php', type: 'GET', dataType: 'JSON', data: {firstpara: para1, secondpara: para2 ,thirdpara: para3}, success: function(data) { //do something } }); 

在我的PHP中,我可以添加这样的行来设置变量:

  $firstpara = isset($_GET['firstpara'])? "{$_GET['firstpara']}" : ''; $firstpara = mysql_real_escape_string($firstpara); 

这里的问题是我不知道用户可能选择多少属性(例如,婚姻状况)。 他们可能使用两个或十个或其他数字。 所以,我的问题是这样的:

如何将数据发送到PHP(安全…所以没有可能的注入)只是我可以动态添加正确数量的$firstpara变量来解释AJAX传递的所有内容,包括添加正确数量的where子句到SQL语句?

我猜测需要有某种for / each循环或者类似的东西,但我对PHP知之甚少并不熟悉。

任何方向将不胜感激。

我不确定我是否以正确的方式解决了您的问题,但您可以尝试(或者如果我弄错了则发表评论)。

替换thise片段:

 $stmt = $dbh->prepare("SELECT COUNT(guid) FROM full_db2 WHERE {$firstpara} = :{$firstpara} AND {$secondpara} = :{$secondpara} AND {$thirdpara} = :{$thirdpara}"); $stmt->execute($data); 

有了这个:

 $validKeys = array('gender','maritalstatus', 'age'); $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(); 

对于你的ajax请求,请阅读: 使用jQuery提交表单

在您的ajax请求中更改行格式: data: {firstpara: para1, secondpara: para2 ,thirdpara: para3}

data: {age: para1, maritalstatus: para2 ,gender: para3},