Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AJAX/PDO冲突(PHP/MySQL)_Php_Mysql_Sql_Ajax_Pdo - Fatal编程技术网

AJAX/PDO冲突(PHP/MySQL)

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 &

几天前,我从一个教程中获得了第一个可用的AJAX脚本。唯一的问题是,它是用“老式”数据库查询编写的。我不得不升级代码以使其与PDO兼容,但我没有完成这项工作

它在一定程度上起作用;我可以显示基于性别的人员列表。然而,当我试图通过年龄或wpm来完善我的列表时,它不起作用

这是原始查询:

$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的内容不是直接将变量替换到查询字符串中。