Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
PHP:为什么mysqli_fetch_assoc()赢了';不行?我正在使用mysqli_stmt_get_result()_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

PHP:为什么mysqli_fetch_assoc()赢了';不行?我正在使用mysqli_stmt_get_result()

PHP:为什么mysqli_fetch_assoc()赢了';不行?我正在使用mysqli_stmt_get_result(),php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我有一个MySQL查询,它一直在运行,直到我更改它以使用准备好的语句。 我无法理解为什么会出现此错误: mysqli_fetch_assoc()希望参数1是mysqli_result,object 给定 (此登录表单的)查询应仅返回一个结果: $conectar = mysqli_connect(localhost, USER, PASS, DATABASE); //from the log in form $email = $_POST['email']; $

我有一个MySQL查询,它一直在运行,直到我更改它以使用准备好的语句。 我无法理解为什么会出现此错误:

mysqli_fetch_assoc()希望参数1是mysqli_result,object 给定

(此登录表单的)查询应仅返回一个结果:

    $conectar = mysqli_connect(localhost, USER, PASS, DATABASE);

    //from the log in form
    $email = $_POST['email'];
    $clave = $_POST['clave']; 

//this should get me just one result: the user to which the email belongs.
    $consulta = "SELECT usuarios.userID, usuarios.userPass, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, rolesUsuarios.nombreRol,
                 GROUP_CONCAT(rolesUsuarios.nombreRol SEPARATOR '|') AS roles
                 FROM rolesUsuarios, usuarios 
                 WHERE usuarios.userEmail=?
                 AND rolesUsuarios.userID = usuarios.userID
                 GROUP BY usuarios.userID
                 ";
    $buscarUsuario = mysqli_prepare($conectar,$consulta);
    mysqli_stmt_bind_param($buscarUsuario, 's', $email);
    mysqli_stmt_execute($buscarUsuario);

        if (mysqli_stmt_get_result($buscarUsuario)) { 
            $row = mysqli_fetch_assoc($buscarUsuario);
            $originalPass = $row['userPass'];
...

为什么不工作?查询本身应该返回一个带有该结果的数组,其中包含用户名电子邮件、密码(实际上是一个哈希值)、他的角色等。

使用mysqli_stmt_execute()时,在执行任何其他查询之前,必须使用mysqli_stmt_fetch()函数获取数据

你很接近:

    //  vvvvvvv--- this is missing
    if ($result = mysqli_stmt_get_result($buscarUsuario)) { 
        $row = mysqli_fetch_assoc($result);
        //                        ^^^^^^^--- & needs to be used here
原因是,
$buscarusario
是一个语句“handle”,而不是来自数据库的实际结果集。您可以使用该“句柄”来获得实际的结果集。遵循使用文档的逻辑线索:

获取
mysqli\u stmt
参数并返回
mysqli\u结果

mysqli_结果mysqli_stmt_get_结果(mysqli_stmt$stmt)

获取一个
mysqli\u结果

数组mysqli_fetch_assoc(mysqli_result$result)


根据文档(),这是如何使用mysqli准备好的语句的,其中$stmt在代码段中是$buscarusario:

mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result, MYSQLI_NUM);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_array($result, MYSQLI_NUM);