我正在使用AJAX脚本,并且此PHP代码通过始终打印0个结果给出了真正艰难的时光。
我怀疑查询,所以我直接在phpmyadmin中运行它,并取得了一排的结果。因此,查询绝对没有错。
有帮助吗?
function processDrpdown($selectedVal) {
$sql = "SELECT id, name FROM mdl_question_categories where parent = $selectedVal";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "Name: " . $row["name"]. "<br>";
echo "ID: " . $row["id"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
// echo $selectedVal;
}
当我必须猜测$selectedVal
包含的内容时,我建议将其保存为SQL注入。也许这也解决了您的问题:
$query = "SELECT id, name FROM mdl_question_categories where parent = ?";
if ($stmt = mysqli_prepare($link, $query)) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $selectedVal);
/* execute statement */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $id, $name);
if (mysqli_stmt_num_rows($stmt) > 0) {
/* fetch values */
while (mysqli_stmt_fetch($stmt)) {
echo "Name: " . $name. "<br>";
echo "ID: " . $id . "<br>";
}
} else {
echo "0 results";
}
/* close statement */
mysqli_stmt_close($stmt);
}
在此之后:我建议您使用MySqli的面向对象样式。看起来您正在关闭此功能之后的连接,但我看不到您在哪里打开连接。您应该将连接传递到函数或在函数中创建它。
$conn = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %sn", mysqli_connect_error());
exit();
}
processDrpdown($conn, $selectedVal);
/* close connection */
$conn->close();
也请查看有关已准备好的语句的手册:https://www.php.net/manual/manual/en/mysqli.prepare.php
准备好的语句使用PDO容易得多,但这是一个额外的模块,我们不知道它是否已安装在您的PHP实例中。