Mam kod, aby sprawdzić, czy dane użytkownika już istnieją w mysql przez mysqli w następujący sposób:
$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";
}
jeśli działa, gdy dane użytkownika już istnieją. ale jeśli dane użytkownika nie istnieją, else
nie działa! dlaczego?
Odpowiedzi:
5 dla odpowiedzi № 1Dzieje się tak, ponieważ twoja instrukcja if zwraca true, dlatego wykonuje w niej kod. $stmt->num_rows
może wrócić true
, false
lub int
, więc nawet jeśli nie zostały naruszone żadne wiersze, nadal zwraca prawidłową wartość
0 jest prawidłową wartością, instrukcja if pominie tę część kodu tylko wtedy, gdy logika zwróci false, więc zmiana kodu na następujący spowoduje rozwiązanie problemu.
if( $stmt->num_rows > 0) {
// your code here
}
1 dla odpowiedzi nr 2
To dlatego, że sprawdzasz num_rows
jak by wróciłfalse
jeśli nie znaleziono żadnych dopasowań. Zamiast tego powraca 0
na wypadek, gdyby żaden wpis nie został dopasowany, wolałbym raczej sprawdzić, czy num_rows jest > 0
if($stmt->num_rows > 0){