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

它工作到一定程度;我可以显示基于性别的人员列表。但是,当我尝试按年龄或wpm优化列表时,它不起作用。

这是原始查询:

$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";


因此,明显的问题是我的代码中剩下了三个$ query变量:

$query .= " AND age <= $age";
$query .= " AND wpm <= $wpm";
echo "Query: " . $query . "<br />";


我用$ stmt替换了$ query的每个实例,但是没有用。所以我用$ row,$ sql甚至$ Total替换了它们,但是没有任何效果。在大多数情况下,它仍然可以使用-我可以根据性别在表格中显示每个名称。但是,当我输入age或wpm的值时,它不起作用(某些变量会产生错误消息)。

谁能告诉我用$ query替换什么?



$age = $_GET['age'];
$sex = $_GET['sex'];
$wpm = $_GET['wpm'];

//build query
$sql= "SELECT * FROM ajax_example WHERE sex = :sex";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':sex',$sex,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();

if(is_numeric($age))
$query .= " AND age <= $age";
if(is_numeric($wpm))
$query .= " AND wpm <= $wpm";
//Execute query

try {
$stmt->execute();
} catch (Exception $e) {
// print_r($e); // Do something more useful here, like log.
}

//Build Result String
$display_string = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>Name</th>";
$display_string .= "<th>Age</th>";
$display_string .= "<th>Sex</th>";
$display_string .= "<th>WPM</th>";
$display_string .= "</tr>";

// Insert a new row in the table for each person returned
while ($row = $stmt->fetch())
{
 $display_string .= "<tr>";
 $display_string .= "<td>$row[name]</td>";
 $display_string .= "<td>$row[age]</td>";
 $display_string .= "<td>$row[sex]</td>";
 $display_string .= "<td>$row[wpm]</td>";
 $display_string .= "</tr>";
}

echo "Query: " . $query . "<br />";
$display_string .= "</table>";
echo $display_string;

最佳答案

您必须先在$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.
}

关于php - AJAX/PDO冲突(PHP/MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21228391/

10-16 15:22