Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Senior69 07. 04. 2014, 21:22:23

Název: Oprava dotazu do MySQL
Přispěvatel: Senior69 07. 04. 2014, 21:22:23
Ahoj, mám tady kousek kódu pro starší typ mysql a potřeboval bych ho opravit pro PDO. Zkouším to už asi hodinu ale pořád to nejde, nevidí někdo chybu v položce "Oprava kódu" ? Děkuji za pomoc

Původní část kódu

Kód: [Vybrat]
$result = mysql_query('SELECT LFT, RGT FROM cat2 WHERE ID='.$nodeId);
$row = mysql_fetch_array($result);

$result = mysql_query('SELECT NAME, LFT, RGT FROM cat2 WHERE LFT BETWEEN '.$row['LFT'].' AND '.$row['RGT'].'');
while ($row = mysql_fetch_array($result)) {

Oprava kódu

Kód: [Vybrat]
$result = $pdo->query('SELECT LFT, RGT FROM cat2 WHERE ID='.$nodeId);
$row = $result->fetch();

$result = $pdo->query('SELECT NAME, LFT, RGT FROM cat2 WHERE LFT BETWEEN '.$row['LFT'].' AND '.$row['RGT'].'');
while ($row = $result->fetch()) {
Název: Re:Oprava dotazu do MySQL
Přispěvatel: Logik 07. 04. 2014, 21:33:25
Hoď sem chybovou hlášku, bez toho Ti to luštit nebudem :-)
Název: Re:Oprava dotazu do MySQL
Přispěvatel: Senior69 07. 04. 2014, 21:41:17
Hoď sem chybovou hlášku, bez toho Ti to luštit nebudem :-)

Fatal error: Call to a member function fetch() on a non-object...
Název: Re:Oprava dotazu do MySQL
Přispěvatel: DK 07. 04. 2014, 21:45:55
Kód: [Vybrat]
PDO::query() returns a PDOStatement object, or FALSE on failure.takze ti ten sql dotaz failuje


mrkni se na prepared statements -> http://www.php.net/manual/en/pdo.prepare.php , pripadne si vytiskni error info (http://www.php.net/manual/en/pdo.errorinfo.php)
Název: Re:Oprava dotazu do MySQL
Přispěvatel: Filip Jirsák 07. 04. 2014, 21:52:33
1. Nepoužíváte binding parametrů a kód umožňuje SQL injection.
2. Nesmyslně voláte 2 dotazy, když to lze získat jedním.

Kód: [Vybrat]
$stmt = $pdo->prepare('SELECT t2.NAME, t2.LFT, t2.RGT FROM cat2 AS t1 JOIN cat2 AS t2 ON t2.LFT BETWEEN t1.LFT AND t1.RGT WHERE ID=:nodeId'.$nodeId');
$stmt->execute(array(':nodeId' => $nodeId));
while ($row = $stmt->fetch()) {
}

3. Nikde netestujete návratovou hodnotu. Pokud dotaz selže, vrací funkce query podle dokumentace FALSE.