Mám kód na kontrolu používateľských údajov, ktoré už v mysql existujú v mysqli takto:
$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";
}
ak funguje, keď už existujú užívateľské údaje. ale ak užívateľské dáta neexistujú, else
nefunguje! Prečo?
odpovede:
5 pre odpoveď č. 1Dôvod, prečo sa to deje, je preto, že váš príkaz if sa vracia pravdivo, preto v ňom vykoná kód. $stmt->num_rows
môže sa vrátiť true
, false
alebo a int
, takže aj keď neboli ovplyvnené žiadne riadky, stále vracia platnú hodnotu
0 je platná hodnota, príkaz if iba vynechá tú časť kódu, ak logika vráti hodnotu false, takže zmena kódu na nasledujúci problém problém vyrieši.
if( $stmt->num_rows > 0) {
// your code here
}
1 pre odpoveď č. 2
Je to preto, že kontrolujete num_rows
ako by sa vrátilfalse
ak sa nenájdu žiadne zhody. Namiesto toho sa vracia 0
v prípade, že nie je priradený žiadny záznam, tak by som radšej skontroloval, či je num_rows > 0
if($stmt->num_rows > 0){