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
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
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"];
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: