sql >> Database >  >> RDS >> Mysql

Onverwacht de PHP-geheugenlimiet bereiken met een enkele PDO-query?

Ding ding ding!

Bij het verbinden met MySQL gebruikt PHP graag gebufferde zoekopdrachten . Dit geldt ongeacht de methode die u gebruikt om verbinding te maken. Bij gebruik van gebufferde query's wordt de volledige resultatenset onmiddellijk opgehaald in plaats van te worden opgehaald wanneer u daarom vraagt. Dit is meestal goed voor de prestaties, omdat er minder retourvluchten zijn.

Maar zoals alles in PHP, is er een probleem. Zoals vermeld op de bufferpagina:

Je gebruikt PHP 5.3, wat betekent dat de kans groot is dat je mysqlnd gebruikt.

U kunt gebufferde zoekopdrachten hier uitschakelen. Het is in elke PHP-interface anders gedaan dan MySQL:

  • Voor PDO moet je de PDO::MYSQL_ATTR_USE_BUFFERED_QUERY instellen toeschrijven aan false .
  • Voor mysqli moet u de MYSQLI_USE_RESULT doorgeven constant naar de query methode.
  • Voor mysql moet je mysql_unbuffered_query aanroepen in plaats van mysql_query .

Volledige details en voorbeelden staan ​​op de pagina.

Grote, niet-gebufferde query-fout!

Je moet Sluit de instructiehandle correct en maak de resultatenset vrij voordat u een nieuwe vraag stelt:

  • In PDO betekent dit het aanroepen van closeCursor op het instructiehandvat.
  • In mysqli betekent dit het aanroepen van free_result op de instructiehandle of free op de resultaathandle, afhankelijk van waarmee u werkt.
  • In mysql betekent dit het aanroepen van mysql_free_result

Als u dit niet doet, resulteert dit in een fout.




  1. Hoe slecht is het gebruik van SELECT MAX(id) in MYSQL in plaats van mysql_insert_id() in PHP?

  2. SQL Server cumulatieve som per groep

  3. COMMIT OF conn.setAutoCommit(true)

  4. Waarom zijn logische leesbewerkingen voor geaggregeerde vensterfuncties zo hoog?