Ich habe einen Code, um zu überprüfen, ob Benutzerdaten bereits in mysql von mysqli vorhanden sind:
$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";
}
Wenn es funktioniert, wenn die Benutzerdaten bereits vorhanden sind. Wenn jedoch keine Benutzerdaten vorhanden sind, wird die else
funktioniert nicht! Warum?
Antworten:
5 für die Antwort № 1Der Grund dafür ist, dass Ihre if -Anweisung true zurückgibt. Daher führt sie den darin enthaltenen Code aus. $stmt->num_rows
kann zurückkehren true
, false
oder ein int
Auch wenn keine Zeilen betroffen sind, gibt es dennoch einen gültigen Wert zurück
0 ist ein gültiger Wert. Die if-Anweisung überspringt diesen Teil des Codes nur, wenn die Logik den Wert false ergibt. Wenn Sie den Code folgendermaßen ändern, wird das Problem behoben.
if( $stmt->num_rows > 0) {
// your code here
}
1 für die Antwort № 2
Dies ist so, weil Sie überprüfen num_rows
wie es zurückkehren würdefalse
wenn keine Übereinstimmungen gefunden werden Es kehrt stattdessen zurück 0
Falls kein Eintrag gefunden wird, schlage ich vor, zu überprüfen, ob num_rows ist > 0
if($stmt->num_rows > 0){