Archief - [Symfony2] DBAL Doctrine geeft fout my mysql query...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

cosmo2

Legacy Member
Hello,

Bij het maken van pagineren probeer ik de limit in te stellen bij het fetchen uit de database.

Bij DBAL doctrine gaat dit zo:

Code:
public function getSchools($limit=3){
		return $this->db->fetchAll('SELECT * FROM schools LIMIT 0,?', 
			array(
				$limit
			));
	}

Om een of andere reden zegt hij dat de query fout is bij '3'...

Het rare is als ik het volgende zet (wat ik niet gaat doen -> Sql injection vulnerable), dan werkt hij wel:

Code:
public function getSchools($limit=3){
		return $this->db->fetchAll('SELECT * FROM schools LIMIT 0,' . $limit);
	}

Ik vermoed dat hij een integer escaped als je het noteert zoals het zou moeten.
Maar dat wil ik natuurlijk niet, ik wil gewoon dat hij die limit erachter plakt als integer.

dJeez

Legacy Member
Allereerst werk je best met prepared statements, zeker als je de query geregeld zou gaan uitvoeren.

Dan wordt het iets als dit (heel rudimentair, niet getest - ik werk altijd met de QueryBuilder :p), met named parameters die de leesbaarheid en onderhoudbaarheid verhogen :
Code:
public function getSchools($limit=3)
{
    $statement = $this->db->prepare('SELECT * FROM schools LIMIT 0,:limit');
    $statement->bindValue('limit', $limit);
    $statement->execute();

    return $statement->fetchAll();
}
cfr. 4. Data Retrieval And Manipulation ? Doctrine DBAL 2.1.0 documentation

Daarnaast overweeg je best ook van (steeds) de DBAL QueryBuilder te gebruiken, zeker als je naast de limit later nog dynamisch extra condities aan de query zou willen toevoegen. Die is superhandig als abstractie (en kan porten naar ORM of een andere DB ook wat vergemakkelijken moest je dat ooit van zin zijn). Daar zet je ook heel makkelijk de limit op met setMaxResults.

cosmo2

Legacy Member
Thanks.
Dat ziet er inderdaad wel overzichtelijker en duidelijker uit.
Er is mij altijd geleerd geweest om het zonder te doen, daarmee dat het niet ging waarschijnlijk :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan