Autor | Zpráva | ||
---|---|---|---|
Fastman Profil |
Zdravím,
nevím, kde dělám chybu, ale nemůžu získat data z databáze. Zde je kód: $get_check = $_GET["check"]; $vysledek = $mysqli->prepare("SELECT * FROM table WHERE xxx LIKE 'yyy' AND zzz LIKE ?"); $vysledek->bind_param("s", $get_check); $vysledek->execute(); $vysledek->store_result(); if($vysledek->num_rows > 0){ $result = $vysledek->get_result(); $row = $result->fetch_array(MYSQLI_ASSOC); $db_email = $row["email"]; } Děkuji za odpověď. |
||
juriad Profil |
#2 · Zasláno: 4. 8. 2017, 11:11:54
table je klíčové slovo. Opravdu se tvoje tabulka jmenuje table, nebo jsi ji jen přejmenoval pro nás?
Pokud se jmenuje table, tak ji zapiš mezi zpětné apostrofy `table` . Mimochodem, je to fakt blbý název.
V opačném případě, jakou chybu to vypisuje/vyhazuje? |
||
Fastman Profil |
To je přejmenované jenom pro vás. Normálně ten SQL dotaz proběhne a když si dám
echo $vysledek->num_rows; tak se mi ukáže hodnota 1, pokud to něco najde. error .log vypíše stderr: PHP message: PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in proto jsem nainstaloval na server apt-get install php5-mysqlnd a nyní to vypisuje stderr: PHP message: PHP Fatal error: Call to a member function fetch_array() on boolean in |
||
Keeehi Profil |
Fastman:
„stderr: PHP message: PHP Fatal error: Call to a member function fetch_array() on boolean in“ To znamená, že $vysledek->get_result(); vrací nejspíše false, protože nastala nějaká chyba. O jakou šlo zjistíš
printf("Error: [%d] %s\n", $mysqli->errno, $mysqli->error); Podle toho co jsem našel, tak za to nejspíše může $vysledek->store_result(); Pokud to tam máš kvůli tomu, že jsi to našel v nějakém návodu, tak to smaž a mělo by ti to fungovat.
|
||
Fastman Profil |
Děkuji za odpověď. Vrací se chyba:
Error: [2014] Commands out of sync; you can't run this command now „Podle toho co jsem našel, tak za to nejspíše může $vysledek->store_result(); Pokud to tam máš kvůli tomu, že jsi to našel v nějakém návodu, tak to smaž a mělo by ti to fungovat.“
Když vymažu $vysledek->store_result(); tak to ve výsledku najde 0. echo $vysledek->num_rows; Správné řešení jsem našel díky stránce: websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection $get_check = $_GET["check"]; $vysledek = $mysqli->prepare("SELECT * FROM moje_tabulka WHERE xxx LIKE 'yyy' AND zzz LIKE ?"); $vysledek->bind_param("s", $get_check); $vysledek->execute(); $result = $vysledek->get_result(); if($result->num_rows > 0) { /*while($row = $result->fetch_assoc()) { $db_email = $row['email']; }*/ //lze použít i toto řešení. $row = $result->fetch_assoc(); $db_email = $row['email']; } |
||
Keeehi Profil |
#6 · Zasláno: 4. 8. 2017, 12:41:45
To proto, že to musíš volat nad výsledkem.
$get_check = $_GET["check"]; $statement = $mysqli->prepare("SELECT * FROM table WHERE xxx LIKE 'yyy' AND zzz LIKE ?"); $vysledek->bind_param("s", $get_check); $statement->execute(); $result = $statement->get_result(); if ($result->num_rows > 0){ $row = $result->fetch_array(MYSQLI_ASSOC); $db_email = $row["email"]; } |
||
Časová prodleva: 8 let
|
0