Oprava dotazu do MySQL

Senior69

Oprava dotazu do MySQL
« kdy: 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()) {


Logik

  • *****
  • 993
    • Zobrazit profil
    • E-mail
Re:Oprava dotazu do MySQL
« Odpověď #1 kdy: 07. 04. 2014, 21:33:25 »
Hoď sem chybovou hlášku, bez toho Ti to luštit nebudem :-)

Senior69

Re:Oprava dotazu do MySQL
« Odpověď #2 kdy: 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...

DK

Re:Oprava dotazu do MySQL
« Odpověď #3 kdy: 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)

Re:Oprava dotazu do MySQL
« Odpověď #4 kdy: 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.