此代码的问题是什么,总是打印结果0.在直接在phpmyadmin中运行查询时,我得到了正确的结果



我正在使用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实例中。

最新更新