从 jquery 传递的变量为 PDO 创建数组
Create array for PDO from variables passed from jquery
这是 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)。
当然,这都是硬编码的,我想要做的是让用户从 select 包含不同属性选项(例如,婚姻状况、性别)的框中进行选择,并根据该选项给出他们在一秒钟内可能的价值选项 select (例如,单身)。我正在动态生成这些 select 框没问题,并且可以将 select 离子存储为变量。我可以将它们传递到 AJAX 以发送到 PHP 文件,但我不知道如何将它们一起解析。像这样发送变量。
var para1 = "male"; //这是从 select 值中捕获的
//更多属性 selected
$.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);
这里的问题是我不知道用户可能有多少属性(例如,婚姻状况)select。他们可能会使用两个或十个或其他一些数字。所以,我的问题是:
我怎样才能将数据发送到 PHP(安全地......所以不可能进行注入)只是我可以动态添加正确数量的 $firstpara
之类的变量来解释所有内容AJAX 通过,包括在 SQL 语句中添加正确数量的 where 子句?
我猜需要某种 for/each 循环或类似的东西,但我对 PHP 还不够熟悉,不知道该怎么做。
如有任何指示,我们将不胜感激。
我不确定我是否以正确的方式解决了您的问题,但您可以尝试(如果我弄错了,请发表评论)。
替换此片段:
$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},
这是 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)。
当然,这都是硬编码的,我想要做的是让用户从 select 包含不同属性选项(例如,婚姻状况、性别)的框中进行选择,并根据该选项给出他们在一秒钟内可能的价值选项 select (例如,单身)。我正在动态生成这些 select 框没问题,并且可以将 select 离子存储为变量。我可以将它们传递到 AJAX 以发送到 PHP 文件,但我不知道如何将它们一起解析。像这样发送变量。 var para1 = "male"; //这是从 select 值中捕获的 //更多属性 selected
$.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);
这里的问题是我不知道用户可能有多少属性(例如,婚姻状况)select。他们可能会使用两个或十个或其他一些数字。所以,我的问题是:
我怎样才能将数据发送到 PHP(安全地......所以不可能进行注入)只是我可以动态添加正确数量的 $firstpara
之类的变量来解释所有内容AJAX 通过,包括在 SQL 语句中添加正确数量的 where 子句?
我猜需要某种 for/each 循环或类似的东西,但我对 PHP 还不够熟悉,不知道该怎么做。
如有任何指示,我们将不胜感激。
我不确定我是否以正确的方式解决了您的问题,但您可以尝试(如果我弄错了,请发表评论)。
替换此片段:
$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},