sql >> Databasteknik >  >> RDS >> Mysql

Är förberedda uttalanden cachade på serversidan över flera sidladdningar med PHP?

När en begäran serveras "rensar" php instansen och frigör resurser och andra variabler. Detta görs i flera steg. Eftersom fastcgi håller processen vid liv efter en begäran exekveras inte alla steg och inte allt minne frigörs. Det finns t.ex. EG(persistent_list) som används av mysql_pconnect() , pg_pconnect() , ... Den här listan töms inte mellan förfrågningar så länge som processen håller i sig (kan vara, beroende på den faktiska implementeringen, men det skulle trotsa syftet med EG(persistent_list)). Om du använder beständiga anslutningar kan ditt skript få en "återanvänd" anslutning etablerad under en tidigare begäran.
För att (åter)använda en förberedd sats direkt behöver du identifieraren för den satsen (och den anslutningen). När du använder (php-)postgresql är detta helt enkelt en (anslutningsmässigt) unik sträng som du skickar till pg_execute() , så ditt skript har inga problem att få åtkomst till uttalandet som tidigare förberetts av en annan instans (med samma anslutning).
Med mysqli eller PDO-mysql du behöver en resurs/objekt som satsidentifierare. Det är ett slags problem eftersom varken mysqli- eller pdo-tillägget verkar erbjuda ett sätt att lagra resursen i EG(persist_list) mellan förfrågningar och du kan inte återskapa den heller. Om inte php-fpm erbjuder en sådan "tjänst" verkar det vara omöjligt att återanvända ett mysql-förberett uttalande direkt.
Allt du kan hoppas på är MySQL:s frågecache på serversidan . I de senaste versionerna (se länk) kan den känna igen uttalandet när du använder förberedda uttalanden. Men inte ens då återanvänder den det faktiska förberedda uttalandet:

Så om jag inte har fel kan du för närvarande inte återanvända en mysql-sats som förbereddes under en tidigare begäran i php.



  1. mysql - ERROR 1064 (42000) när du använder nyckelord som kolumnnamn

  2. Likhetsfunktion i Postgres med pg_trgm

  3. Vilka är fördelarna med VistaDB

  4. Rangordna gemensamma positioner i MySQL