首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在准备好的语句中使用mysqli_stmt_affected_rows()?

如何在准备好的语句中使用mysqli_stmt_affected_rows()?
EN

Stack Overflow用户
提问于 2016-08-10 15:40:54
回答 1查看 203关注 0票数 1

在将此查询更改为具有绑定参数的用户之后,它将不再工作。

代码语言:javascript
运行
复制
    $conectar2 = mysqli_connect(HOST, USER, PASS, DATABASE);

    $buscarUsuarioExistente = " SELECT userID, userEmail 
                                FROM usuarios 
                                WHERE userEmail =?
                              ";
                    $usuarioExiste = mysqli_prepare($conectar2,$buscarUsuarioExistente);
                    mysqli_stmt_bind_param($usuarioExiste, 's', $email);
                    mysqli_stmt_execute($usuarioExiste);
                    mysqli_stmt_close($usuarioExiste);

//SI EL MAIL QUE PONE EL USUARIO YA EXISTE EN BASE
    if (mysqli_stmt_affected_rows($usuarioExiste) != 0) {
            $usuario = mysqli_fetch_assoc($usuarioExiste);
            //como nos devuelve un array, extraemos el primer elemento como string. El array contiene sólo un elemento.
            $userID = array_shift($usuario);
            //si el usuario existe en base, no lo generamos, sino que le agregamos el curso que seleccionó y le asignamos el rol "noAutorizado" hasta no verificar el pago
                    $asignarRol = "INSERT INTO rolesUsuarios 
                                    (userID, nombreRol) 
                                   VALUES 
                                    (?, ?)
                                   ";
                    $noAutorizado = 'noAutorizado';             
                    $asignarRolenBase = mysqli_prepare($conectar2,$asignarRol);
                    mysqli_stmt_bind_param($asignarRolenBase, 'ss', $userID, $noAutorizado);
                    mysqli_stmt_execute($asignarRolenBase);

                    if ($asignarRolenBase) {
                        echo 'Estado "pendiente" del usuario generado.<br>';
                        } 
                        else { 
                            echo 'Error al asignar estado al usuario'.mysqli_error($conectar2).'<br>';
                        }
                    mysqli_stmt_close($asignarRolenBase);

    }

问题似乎与此有关:mysqli_stmt_affected_rows($usuarioExiste) != 0 (这是第45行)

因为我得到了这个错误:

警告: mysqli_stmt_affected_rows():无法在第45行的/home/public_html/inscripcionUsuario.php中获取mysqli_stmt

更新:

我注意到,在我调用它之前,我确实在行中关闭了它(谢谢齐雷尔),但是沿着这一行向前移动,所以我以前没有关闭它,给出了以下错误:

警告: mysqli_fetch_assoc()期望参数1为mysqli_result,对象给定

因此,通过更新:$conectar2 =mysqli_connect(主机、用户、PASS、数据库);

代码语言:javascript
运行
复制
    $buscarUsuarioExistente = " SELECT userID, userEmail 
                                FROM usuarios 
                                WHERE userEmail =?
                              ";
                    $usuarioExiste = mysqli_prepare($conectar2,$buscarUsuarioExistente);
                    mysqli_stmt_bind_param($usuarioExiste, 's', $email);
                    mysqli_stmt_execute($usuarioExiste);

//SI EL MAIL QUE PONE EL USUARIO YA EXISTE EN BASE
    if (mysqli_stmt_affected_rows($usuarioExiste) != 0) {
            $usuario = mysqli_fetch_assoc($usuarioExiste);
            //como nos devuelve un array, extraemos el primer elemento como string. El array contiene sólo un elemento.
            $userID = array_shift($usuario);
            //si el usuario existe en base, no lo generamos, sino que le agregamos el curso que seleccionó y le asignamos el rol "noAutorizado" hasta no verificar el pago
                    $asignarRol = "INSERT INTO rolesUsuarios 
                                    (userID, nombreRol) 
                                   VALUES 
                                    (?, ?)
                                   ";
                    $noAutorizado = 'noAutorizado';             
                    $asignarRolenBase = mysqli_prepare($conectar2,$asignarRol);
                    mysqli_stmt_bind_param($asignarRolenBase, 'ss', $userID, $noAutorizado);
                    mysqli_stmt_execute($asignarRolenBase);

                    if ($asignarRolenBase) {
                        echo 'Estado "pendiente" del usuario generado.<br>';
                        } 
                        else { 
                            echo 'Error al asignar estado al usuario'.mysqli_error($conectar2).'<br>';
                        }
                    mysqli_stmt_close($asignarRolenBase);
                    mysqli_stmt_close($usuarioExiste);

    }

更新:

我试过了mysqli_stmt_num_rows() (if (mysqli_stmt_num_rows($usuarioExiste) != 0))

相反,我得到了一个错误:

警告: mysqli_stmt_bind_param()期望参数1为mysqli_stmt,布尔给定

EN

回答 1

Stack Overflow用户

发布于 2016-08-10 15:43:47

你的问题就在这里

代码语言:javascript
运行
复制
mysqli_stmt_close($usuarioExiste);

你是正在关闭mysqli_stmt对象

关闭一份准备好的声明。mysqli_stmt_close()还可以释放语句句柄

至于另一个问题,你错过了一步

代码语言:javascript
运行
复制
 $usuario = mysqli_fetch_assoc($usuarioExiste);

这将无法工作,因为您有一个mysqli_stmt对象,而mysqli_fetch_assoc需要一个mysqli_result对象。这有点棘手,因为您可能没有安装MySQL本机驱动程序(这是服务器配置)。如果你这样做了,你可以这样解决它

代码语言:javascript
运行
复制
$result = mysqli_stmt_get_result($usuarioExiste);
$usuario = mysqli_fetch_assoc($result);

如果该函数未定义,则必须使用更笨重的结果并赋值变量。这里的示例需要您进行大量的重新编码,但是您可以在结果上看到一些示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38878001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档