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

时间:2015-01-14 13:59:59

标签: php jquery mysql ajax pdo

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

$hostname = '****';
$username = '****';
$password = '****';

try {
$dbh = new PDO("mysql:host=$hostname;dbname=firstdb", $username, $password);

echo 'Connected to database<br />';
$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 =&#34;男性&#34 ;; //这是从选择值中捕获的     //选择了更多属性

$.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传递的所有内容,包括添加正确的SQL语句中where子句的数量?

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

任何方向都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

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

替换这个片段:

$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请求只需阅读:Submit a form using jQuery

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

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