Autor Zpráva
Sxmanek
Profil
Zdravím, zkouším něco s pomocí PDO a něco mi nejde do hlavy. Když mám kod...
 $query = $connection->prepare("SELECT * FROM users WHERE username = ? OR email = ? ");
 $result = $query->execute(array($username, $mail));
 $count = $query->rowCount();
tak 1. řádek jen přiřadí do $query co se má udělat
2. řádek uloží do $result výsledek z $query kam se dosadí místo otazníků hodnoty
tak jak to, že ten 3. řádek počítá řádky z $query a ne $result, neukamenujte mě tu, pokud to bude nějaká kravina jen :)
Jan Tvrdík
Profil
V proměnné $result je true nebo false podle úspěchu dotazu. Neobsahuje tedy načtené řádky. Navíc proměnná $query by se měla jmenovat spíš $statement.
Sxmanek
Profil
takže po provedení execute mohu pracovat s $query jako kdyby tam byly už hodnoty?
Alphard
Profil
Jak lze zjistit v manuálu (nebo jak píše [#2] Jan Tvrdík), execute() vrací bool, z toho výsledky nedostanete. Výsledek se získá pomocí fetch(), fetchAll() apod.
Sxmanek
Profil
Takže by stačilo, kdyby jsem použil BindParam na přiřazení a execute bych nemusel použít nebo je lepší tohle?
xROAL
Profil
Sxmanek:
BindParam na přiřazení a execute bych nemusel
bindParam() je len iný spôsob akým dosadiť premenné do dotazu. execute() je potrebné zavolať v oboch prípadoch.
Toto:
<?php
$stmt = $connection->prepare("SELECT * FROM users WHERE username = ? OR email = ? ");
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $mail);
$stmt->execute();
?>
Je vo výsledku to isté ako:
<?php
$stmt = $connection->prepare("SELECT * FROM users WHERE username = ? OR email = ? ");
$stmt->execute(array($username, $mail));
?>

Rozdiel je napríklad v tom, že bindParam() odkazuje na premennú ako na referenciu. Môžem teda neskôr zmeniť hodnotu premennej a znovu vykonať execute(). Do dotazu sa dosadí zmenená hodnota aj bez volania ďalšieho bindParam(). Tiež je s bindParam() možné vynútiť dátovy typ či dĺžku vstupu.

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:

0