Tengo un código para verificar que los datos de usuario ya existen en mysql por mysqli de esta manera:
$SQL = "SELECT users.email,users.handle,userprofile.mobile FROM users,userprofile
WHERE users.email =? OR users.handle =? OR userprofile.mobile=?";
if ($stmt = $mysqli->prepare($SQL)) {
$stmt->bind_param("sss", $email,$username,$mobile);
$stmt->execute();
if($stmt->num_rows){
$result = $stmt->get_result();
$row = $result->fetch_array(MYSQLI_NUM);
if($row[0] ==$email){echo "email exist";}
if($row[1] ==$username){echo "username exist";}
if($row[2] ==$mobile){echo "mobile exist";}
}
else{
echo "OK";
}
Si funciona cuando los datos de usuario ya existen. pero si los datos de usuario no existen, la else
¡No funciona! ¿por qué?
Respuestas
5 para la respuesta № 1La razón por la que esto ocurre es porque su sentencia if se está volviendo verdadera, por lo tanto, ejecuta el código dentro de ella. $stmt->num_rows
puede regresar true
, false
o una int
, por lo que incluso si no hay filas afectadas, sigue devolviendo un valor válido
0 es un valor válido, la instrucción if solo omitirá esa parte del código si la lógica devuelve falso, por lo que cambiar su código a lo siguiente solucionará el problema.
if( $stmt->num_rows > 0) {
// your code here
}
1 para la respuesta № 2
Esto es porque estás comprobando num_rows
como volveríafalse
si no se encuentran coincidencias En cambio, vuelve 0
en caso de que no haya ninguna entrada coincidente, entonces me gustaría sugerir que se verifique si num_rows > 0
if($stmt->num_rows > 0){