AJAX/PDO冲突(PHP/MySQL)
几天前,我从一个教程中获得了第一个可用的AJAX脚本。唯一的问题是,它是用“老式”数据库查询编写的。我不得不升级代码以使其与PDO兼容,但我没有完成这项工作 它在一定程度上起作用;我可以显示基于性别的人员列表。然而,当我试图通过年龄或wpm来完善我的列表时,它不起作用 这是原始查询:AJAX/PDO冲突(PHP/MySQL),php,mysql,sql,ajax,pdo,Php,Mysql,Sql,Ajax,Pdo,几天前,我从一个教程中获得了第一个可用的AJAX脚本。唯一的问题是,它是用“老式”数据库查询编写的。我不得不升级代码以使其与PDO兼容,但我没有完成这项工作 它在一定程度上起作用;我可以显示基于性别的人员列表。然而,当我试图通过年龄或wpm来完善我的列表时,它不起作用 这是原始查询: $query = "SELECT * FROM ajax_example WHERE sex = '$sex'"; 因此,明显的问题是代码中剩下的三个$query变量: $query .= " AND age &
$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";
因此,明显的问题是代码中剩下的三个$query变量:
$query .= " AND age <= $age";
$query .= " AND wpm <= $wpm";
echo "Query: " . $query . "<br />";
$query.=”和age在准备、绑定参数并执行之前,必须首先在$sql
中构建整个查询字符串
//build query
$sql= "SELECT * FROM ajax_example WHERE sex = :sex";
if(is_numeric($age)) {
$sql .= " AND age <= :age";
}
if(is_numeric($wpm)) {
$sql .= " AND wpm <= :wpm";
}
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':sex',$sex,PDO::PARAM_STR);
if (is_numeric($age)) {
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
}
if(is_numeric($wpm)) {
$stmt->bindParam(':wpm', $wpm, PDO::PARAM_INT);
}
$stmt->execute();
//Execute query
try {
$stmt->execute();
} catch (Exception $e) {
// print_r($e); // Do something more useful here, like log.
}
//生成查询
$sql=“SELECT*FROM ajax\u示例,其中sex=:sex”;
如果(是数字($age)){
$sql.=”和age在准备、绑定参数并执行之前,必须首先在$sql
中构建整个查询字符串
//build query
$sql= "SELECT * FROM ajax_example WHERE sex = :sex";
if(is_numeric($age)) {
$sql .= " AND age <= :age";
}
if(is_numeric($wpm)) {
$sql .= " AND wpm <= :wpm";
}
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':sex',$sex,PDO::PARAM_STR);
if (is_numeric($age)) {
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
}
if(is_numeric($wpm)) {
$stmt->bindParam(':wpm', $wpm, PDO::PARAM_INT);
}
$stmt->execute();
//Execute query
try {
$stmt->execute();
} catch (Exception $e) {
// print_r($e); // Do something more useful here, like log.
}
//生成查询
$sql=“SELECT*FROM ajax\u示例,其中sex=:sex”;
如果(是数字($age)){
$sql.=”和age在PDO中使用未命名参数进行动态查询并在execute()中将其作为数组传递更容易。除非至少传递了$\u GET['sex']
参数,否则不会执行该语句。我已在派生语句的回显和数组的转储中保留了这些参数
$age = isset($_GET['age']) ? $_GET['age'] : NULL;
$wpm = isset($_GET['wpm']) ? $_GET['wpm'] : NULL;
if(isset($_GET['sex'])){
$params =array($_GET['sex']);
//build query
$sql= "SELECT * FROM xajax_example WHERE sex = ?";
if(is_numeric($age)){
$sql .= " AND age ?";
array_push($params,$age);
}
if(is_numeric($wpm)){
$sql .= " AND wpm ?";
array_push($params,$wpm);
}
echo $sql;//Test
print_r($params);//Test
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
}else{
echo "No Sex";//Default message for no $_GET['sex']
}
在PDO中使用未命名参数进行动态查询并在execute()中将其作为数组传递更容易。除非至少传递了$\u GET['sex']
参数,否则不会执行该语句。我已在派生语句的回显和数组的转储中留下了
$age = isset($_GET['age']) ? $_GET['age'] : NULL;
$wpm = isset($_GET['wpm']) ? $_GET['wpm'] : NULL;
if(isset($_GET['sex'])){
$params =array($_GET['sex']);
//build query
$sql= "SELECT * FROM xajax_example WHERE sex = ?";
if(is_numeric($age)){
$sql .= " AND age ?";
array_push($params,$age);
}
if(is_numeric($wpm)){
$sql .= " AND wpm ?";
array_push($params,$wpm);
}
echo $sql;//Test
print_r($params);//Test
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
}else{
echo "No Sex";//Default message for no $_GET['sex']
}
哇,我还有很多东西要学;我以为bindParam的东西是以查询结束的!我不确定你的意思。在执行查询之前必须完成。bindParam的东西不是直接将变量替换到查询字符串中。哇,我还有很多东西要学;我以为bindParam的东西是以查询结束的!不是s你的意思是什么。在执行查询之前必须完成。bindParam的内容不是直接将变量替换到查询字符串中。