【问题标题】:Create array for PDO from variables passed from jquery从 jquery 传递的变量为 PDO 创建数组
【发布时间】:2015-01-14 13:59:59
【问题描述】:

这是我现在要从我的数据库中获取计数的 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 = "男性"; //这是从选择值中捕获的 //选择更多属性

$.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 不够熟悉,不知道该怎么做。

任何方向都将不胜感激。

【问题讨论】:

    标签: php jquery mysql ajax pdo


    【解决方案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},

    【讨论】:

    • 这可能是在正确的轨道上。我需要如何在我的 AJAX 中传递变量?
    • 作为 $_GET 变量。因此,对于 jQuery,它将是 $.get(url, $("#form").serialize());
    • 事先不知道变量个数怎么办?我要发送一个数组吗?如果有,是什么格式?
    • 我仍然不确定如何处理提交数据以及它必须是什么格式。我知道如何使用足够多的 ajax 来构造几乎任何东西来传递给 PDO,但我不知道哪种格式可以工作。如何显示哪些键和哪些值放在一起等?
    • 你试过我的 php 代码了吗?您是说 jquery 方面对您来说不是问题。所以只需将它发送到 php - 并按照我展示的方式接收结果。如果你不能从 jquery 端发送它,我们可以解决这个问题,但看起来你可以发送 1-2-3 参数,所以你不能发送 7?或者你不知道如何组织循环?
    猜你喜欢
    • 2019-05-31
    • 2018-01-25
    • 1970-01-01
    • 2022-01-11
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多