Diskuze: mysqli_num_rows() expects parameter 1 to be mysqli_result
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Chyba je v tom, že mysqli_query() neumí pracovat s předpřipravenými výrazy (alespoň ne ve své základní podobě). Ideální by bylo přejít na objektový přístup, ale i procedurální mysqli nabízí alternativu, zkus kouknout do manuálu na mysqli_prepare(). Pokud jde o bezpečnost, předpřipravené výrazy by tě při správném používání měly zcela ochránit před SQL injekcemi, ale bohužel SQL injekce není jediný způsob, který útočníci mohou použít.
K SQL dotazu:
"SELECT COUNT(*) FROM uzivatelia WHERE uzivatel_id = ? LIMIT 1"
Pokud bude správné připojení k databázi a tabulce, pak vrátí vždy pouze jednu položku - počet všech nalezených položek. Pokud nebude žádná nalezená položka, vrátí hodnotu 0, což ale stále bude 1 položka. Takže je pak zbytečné ověřovat, mysqli_num_rows() > 0. Funkce COUNT() je tzv. agregační funkce, tzn. přijímá jeden nebo více parametrů a vrací vždy jen jeden.
Takže stačí používat mysqli_num_rows() na dotaz, který vrátí všechny položky a ne pouze jejich počet:
"SELECT * FROM uzivatelia WHERE uzivatel_id = '$username' LIMIT 1"
nebo použít méně náročnou funkci COUNT() a poté už počet položek nepočítat:
$pocet = mysqli_fetch_array(mysqli_query($db, "SELECT COUNT(*) FROM uzivatelia "))[0];
Já bych ti doporučil PDO. Je modernější a co vím tak i
bezpečnější.
viz. tahle diskuse: http://www.itnetwork.cz/…4455f52e6208
a tady snad najdeš jak na to
http://www.itnetwork.cz/…ovladace-pdo
http://www.itnetwork.cz/…-a-modularne
Zobrazeno 3 zpráv z 3.