PHP致命错误:调用未定义的函数mysqli_stmt_get_result()

时间:2017-07-09 22:56:35

标签: php mysql

我一直收到错误PHP致命错误:调用未定义的函数mysqli_stmt_get_result()。我正在使用PHP 5.6版并在我的托管服务提供商c面板中启用了扩展mysqlind,但我无法弄清楚为什么我仍然会收到此错误。我已经研究并发现每次我需要启用mysqli nd才能使用mysqli_stmt_get_result。任何人都可以协助/教导我做错了什么。谢谢。

SIGNUP.PHP:

<?php
    session_start();
    include '../dbh.php';

    $respond = array(
        'status' => true,
        'message' => 'There was an error',
        'redirect',
        'errors'
    );

    if (isset($_POST['submit'])) {

        $first = $_POST['first'];
        $last  = $_POST['last'];
        $email = $_POST['email'];
        $pwd   = $_POST['pwd'];

        $errorEmpty = false;
        $errorEmail = false;


        if (empty($first) || empty($last) || empty($email) || empty($pwd)) {

            $respond['errors'][]   = "Please fill out all fields!";
            $respond['errorEmpty'] = true;

        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $respond['errors'][]   = "Please enter a valid email address!";
            $respond['errorEmail'] = true;

        } else {
            $sql  = "SELECT email FROM user WHERE email= ? ";
            $stmt = mysqli_prepare($conn, $sql);
            mysqli_stmt_bind_param($stmt, 's', $email);
            mysqli_stmt_execute($stmt);
            $result   = mysqli_stmt_get_result($stmt);  //This is where I getting my error
            $num_rows = mysqli_num_rows($result);
            if ($num_rows > 0) {
                $respond['errors'][]   = "That email address already exists!";
                $respond['errorEmail'] = true;
            }

            else {
                $encryptpwd = password_hash($pwd, PASSWORD_DEFAULT);
                $sql        = "INSERT INTO user (first, last, email, pwd) VALUES (?,?,?,?)";
                $stmt       = mysqli_prepare($conn, $sql);
                mysqli_stmt_bind_param($stmt, 'ssss', $first, $last, $email, $password_hash);

                if (mysqli_stmt_execute($stmt)) {

                    $userID = mysqli_insert_id($conn);
                    $status = 1;
                    $sql2   = "INSERT INTO profileImg (email, status) VALUES(?,?)";
                    $stmt2  = mysqli_prepare($conn, $sql2);
                    mysqli_stmt_bind_param($stmt2, 'si', $email);
                    mysqli_stmt_execute($stmt);

                    $_SESSION['id'] = $userID;

                    $respond['redirect'] = "../profile.php?id=$userID";
                }
            }
        }
    }
    echo json_encode($respond);
    ?>

5 个答案:

答案 0 :(得分:5)

为了防止其他人尖叫,试图弄清楚为什么在启用mysqlnd本机驱动程序后这不起作用。这是因为您需要确保同时启用两个本机驱动器。如果要使用此功能,则需要在服务器上同时启用mysqlnd和nd_mysqli。

否则,仅启用mysqlnd本机驱动程序不包括mysqli_stmt_get_result函数,因为该函数显然位于nd_mysqli本机驱动程序中。不幸的是,大多数文档只谈论mysqlnd本机驱动程序。

一旦启用了两个本机驱动程序,此功能将按文档所述工作。

哦,在我的托管服务器上,您需要禁用/取消选中mysqli才能启用nd_mysqli。

Screenshot of cpanel

答案 1 :(得分:1)

您是否正确安装了mysqlnd驱动程序?根据{{​​3}}中的评论:

  

如果你没有安装/装载任何mysqlnd,你会得到一个   尝试调用&#34; mysqli_stmt_get_result()&#34;时未定义的引用。

此外,还讨论了此问题Manualhere

最后,这里有一个here讨论有关使用cpanel驱动程序的信息,您可能会发现它很有用。

答案 2 :(得分:1)

您正在使用获取数据的程序方式。

如果可能,您可以使用面向对象的方式,因此无需在服务器上启用nd_mysqli。

$sql = "SELECT * FROM users WHERE id=?"; // SQL with parameters
$stmt = $conn->prepare($sql); 
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$user = $result->fetch_assoc(); // fetch data 

答案 3 :(得分:0)

我遇到了同样的问题(“ PHP致命错误:调用未定义的函数mysqli_stmt_get_result()”),它所要做的就是更改服务器的php版本,也将其自动设置为5.6至7.2,并确保nd_mysqli被检查。请注意,mysqlnd是nd-mysqli的替代品。

步骤:
在cpanel中找到更改php版本的部分
选择当前版本为7.2的php的最高版本
确保从扩展列表中检查了nd_mysqli
如果出现任何错误,请尝试取消选中mysqlnd

答案 4 :(得分:0)

只要在服务器上检查数据库表名称是否与您的php代码匹配即可。 在服务器sql admin的右侧,您可以找到此链接。 单击“创建php代码”,然后使用如下所示的确切表名:
$ sql =“ SELECT * FROM'users'WHERE id =?”; links image 就我而言,代码如下所示: table name image $ sql =“ SELECT * FROM'pending_products'WHERE id =?”;