NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: SELECT s mysqli_prepare();

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jakub Du
Člen
Avatar
Jakub Du:23.2.2018 22:43

Ahoj. Nevíte někdo, jak upravit tenhle program, aby když už v databázi bude obsažen jeden E-mail, to vyhodilo např. nějaké echo.
Protože v tomto programu vždy něco je v tom mysqli_prepare() , tudíž program říka, že daný E-mail je stále zabrán.

$prip = mysqli_connect("localhost", "root", "", "databaze_1");

        $existuje_email = mysqli_prepare($prip,'
                        SELECT COUNT(*)
                        FROM uzivatele
                        WHERE email=?
                        LIMIT 1
                ');


                mysqli_stmt_bind_param($existuje_email, "s", $ex_email);

                $ex_email = 'a';

mysqli_stmt_execute($existuje_email);


mysqli_stmt_close($existuje_email);





                  if($existuje_email)
                  echo('Tento E-mail je již obsazen.');
                  else
                  echo('Tento E-mail je volný.');
Editováno 23.2.2018 22:46
 
Odpovědět
23.2.2018 22:43
Avatar
lionnel
Člen
Avatar
lionnel:25.2.2018 15:19

Problém je, že nikde nezískáváš výsledek dotazu, který potřebuješ kontrolovat, ale místo toho v podmínce kontroluješ instanci mysqli_stmt, což se vždycky vyhodnotí jako true. Uprav si to podle kódu níže a mělo by ti to fungovat, zejména se zaměř na část, kde se volají metody mysqli_stmt_bin­d_result() a mysqli_stmt_fet­ch().

$connection = mysqli_connect("localhost", "root", "", "databaze_1");

$stmt = mysqli_prepare($connection, 'SELECT COUNT(*) FROM uzivatele WHERE email=?');
$email = '[email protected]';

mysqli_stmt_bind_param($stmt, 's', $email);
mysqli_stmt_execute($stmt);

// Namapování výsledku do proměnné count
mysqli_stmt_bind_result($stmt, $count);

// Naplnění proměnné count
mysqli_stmt_fetch($stmt);

echo $count > 0 ? 'Tento E-mail je již obsazen.' : 'Tento E-mail je volný.';

mysqli_stmt_close($stmt);
Editováno 25.2.2018 15:21
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
25.2.2018 15:19
Avatar
Odpovídá na lionnel
Dominik Gavrecký:25.2.2018 17:38

Ja by som to možno riešil elegantnejšie. Čo použiť niečo takéto:

try{
SQL insert;
} catch (UNIQE EXCEPTION, $exception){
echo 'Email už existuje';
}
Nahoru Odpovědět
25.2.2018 17:38
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.