Nette\Database vnořený dotaz

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Fyasko
Člen | 106
+
0
-

Ahoj, opět jsem narazil na menší problém.. Nerad bych používal dotazy tipu

$this->database->query('SELECT * FROM entries WHERE posted>=(SELECT log_time FROM users WHERE nickname="'.$value.'")')

Funguje, ale sqlinjection :) Zkoušel jsem něco jako

$where = $this->database->table('users')->select('log_time')->where('nickname', $value);
$this->database->table('entries')->select('*')->where('posted'>= $where)->order('posted DESC');

ale neúspěšně. Mohl by mi prosím někdo naznačit proč ne, a kde je vlastně chyba? :)

James_Scott
Člen | 55
+
0
-
$table->where("field", $conn->table($tableName))

field IN (SELECT $primary FROM $tableName)

$table->where("field", $conn->table($tableName)->select('col'))

field IN (SELECT col FROM $tableName)

David Matějka
Moderator | 6445
+
0
-

V NDB vzdy pouzivej placeholery

$this->database->query('SELECT * FROM entries WHERE posted>=(SELECT log_time FROM users WHERE nickname= ?)', $value);

v NDBT se subquery moc nepochodis – v mysql nejsou podporovane. musis to tedy resit dvema dotazy

Editoval matej21 (10. 8. 2014 21:48)

Fyasko
Člen | 106
+
0
-

Děkuju za snahu, zmátla mě ještě o kapku víc :D

matej21: Děkuji, to je asi nejlepší způsob :)

Editoval Fyasko (10. 8. 2014 21:48)

Fyasko
Člen | 106
+
0
-

Hale, a co když jsou tam dvě proměnné? mám to stavět do array s indexem nebo jak?

vvoody
Člen | 910
+
0
-

V dokumentácií som našiel minimálne 4 príklady s dvomi placeholdermi. Čítal si ju?

Fyasko
Člen | 106
+
0
-

Podívám se tedy, děkuju :D