Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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
$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
$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()) {
-
Hoď sem chybovou hlášku, bez toho Ti to luštit nebudem :-)
-
Hoď sem chybovou hlášku, bez toho Ti to luštit nebudem :-)
Fatal error: Call to a member function fetch() on a non-object...
-
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)
-
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.
$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.