【发布时间】:2016-12-17 02:36:53
【问题描述】:
将此查询更改为具有绑定参数的用户后,它将不再起作用。
$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():无法获取 mysqli_stmt in /home/public_html/inscripcionUsuario.php 第 45 行
更新:
我注意到我在调用它之前确实在该行中关闭了它(感谢 Qirel),但是在该行进一步向下移动,所以我之前没有关闭它,给了我这个错误:
警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result, 给定对象
所以,随着更新: $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);
//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,布尔值
【问题讨论】:
-
这可能是因为你之前关闭了它。
标签: php mysql mysqli prepared-statement