Autor | Zpráva | ||
---|---|---|---|
potom Profil |
#1 · Zasláno: 29. 10. 2020, 08:29:00
Prosím neškrťte mě, prepared statements jsem začal používat nově.....
$sql = "SELECT * FROM user WHERE `username`=? AND `password` = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password)); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $realne_jmeno = $row['name']; $opravneni = $row['rights']; } To funguje. Nedaří se mi kód přepracovat, abych měl výstup v případě, že bude prázdný výsledek dotazu, snažil jsem se: $sql = "SELECT * FROM user WHERE `username`=? AND `password` = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password)); $stmt->execute(); $result = $stmt->get_result(); $stmt->store_result(); if ($stmt->num_rows == 0){ while ($row = $result->fetch_assoc()) { $realne_jmeno = $row['name']; $opravneni = $row['rights']; }} else echo "Nula výsledků...."; ale nefunguje... A nemám ten kód zbytečně složitý? Nedá se to zjednodušit? Díky za pomoc. |
||
Kajman Profil |
#2 · Zasláno: 29. 10. 2020, 08:52:45
Načítání dat máte dělat, pokud tam je více řádků než 0, ne když je řádků 0.
$stmt->num_rows > 0 |
||
potom Profil |
Díky, moje blbost, ale pořád nefunguje...
Aktualizovaný kód: $sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND deactive = 0 "; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password)); $stmt->execute(); $result = $stmt->get_result(); $stmt->store_result(); if ($stmt->num_rows > 0){ while ($row = $result->fetch_assoc()) { $_SESSION[user] = new User; $_SESSION[user]->shop = $row[shop]; $_SESSION[user]->level = $row[level]; $_SESSION[user]->name = $row[name]; $_SESSION[user]->id = $row[id]; echo $_SESSION[user]->name; }} else echo "NULA VÝSLEDKŮ"; Výstup je vždy to echo "NULA VÝSLEDKŮ", ať se zadává, co se zadává. |
||
anonym_ Profil * |
#4 · Zasláno: 29. 10. 2020, 09:56:01
potom:
Tak asi neexistuje shoda v hesle. Kde se berou proměnné post_*? Btw. “deactive” :-) |
||
potom Profil |
#5 · Zasláno: 29. 10. 2020, 10:06:05
NN. Tento dotaz normálně funguje:
//přihlášení uživatele $sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 "; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $_SESSION[user] = new User; $_SESSION[user]->shop = $row[shop]; $_SESSION[user]->level = $row[level]; $_SESSION[user]->name = $row[name]; $_SESSION[user]->id = $row[id]; echo $_SESSION[user]->name; } Když chci ošetřit nula výsledků, tak to nefunguje: //přihlášení uživatele $sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 "; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password)); $stmt->execute(); $result = $stmt->get_result(); $stmt->store_result(); if ($stmt->num_rows > 0){ while ($row = $result->fetch_assoc()) { $_SESSION[user] = new User; $_SESSION[user]->shop = $row[shop]; $_SESSION[user]->level = $row[level]; $_SESSION[user]->name = $row[name]; $_SESSION[user]->id = $row[id]; echo $_SESSION[user]->name; }} else echo "NULA VÝSLEDKŮ"; |
||
Kajman Profil |
#6 · Zasláno: 29. 10. 2020, 10:09:04
Nepomůže dát řádek 5 až před řádek 8?
|
||
potom Profil |
#7 · Zasláno: 29. 10. 2020, 11:01:33
Zkoušel jsem, nefunguje...
|
||
Kajman Profil |
#8 · Zasláno: 29. 10. 2020, 13:42:25
Tak můžete např. jednoduše místo while použít if, když Vás zajímá jen první řádek a k němu dát else.
|
||
Serg Profil |
Metody
store_result() a get_result() se mezi sebou koušou.
Když se nejdřív zavolá store_result() , tak v $stmt->num_rows bude správný počet řádků, ale get_result() potom vrátí mysqli_result objekt s prázdným polem.
Naopak, když se nejdřív zavolá get_result() , tak potom nebude fungovat $stmt->num_rows .
Je potřeba vybrat jednu z těch dvou metod, a podle toho přizpůsobit procházení vytažených dat z databáze. Btw, řádky se SESSION (10 - 15) by měly házet milion Notice chyb. To je tak těžký dát ty klíče do úvozovek? (jakože pochybuju že je pro každý klíč vytvořená konstanta) Jedna z možností jak to řešit: //přihlášení uživatele $sql = "SELECT * FROM user WHERE `username`=? AND `password` = ? AND `deactive` = 0 LIMIT 1 "; $stmt = $conn->prepare($sql); $stmt->bind_param("ss", $post_username, crypt($post_password)); $stmt->execute(); $result = $stmt->get_result(); //$stmt->store_result(); - tohle pryč if ($result->num_rows > 0){ while ($row = $result->fetch_assoc()) { $_SESSION['user'] = new User; $_SESSION['user']->shop = $row['shop']; $_SESSION['user']->level = $row['level']; $_SESSION['user']->name = $row['name']; $_SESSION['user']->id = $row['id']; echo $_SESSION['user']->name; }} else echo "NULA VÝSLEDKŮ"; |
||
Časová prodleva: 3 roky
|
0