sql >> Database teknologi >  >> RDS >> Mysql

Er forberedte udsagn cachelagret på serversiden på tværs af flere sideindlæsninger med PHP?

Når en anmodning serveres, "renser" php instansen og frigiver ressourcer og andre variabler. Dette gøres i flere trin. Da fastcgi holder processen i live efter en anmodning, bliver ikke alle trin udført, og ikke al hukommelse frigives. Der er f.eks. EG(persistent_list), som bruges af mysql_pconnect() , pg_pconnect() , ... Denne liste tømmes ikke mellem anmodninger, så længe processen holder i live (kan være, afhængigt af den faktiske implementering, men det ville trodse formålet med EG(persistent_list)). Hvis du bruger vedvarende forbindelser, kan dit script muligvis få en "genbrugt" forbindelse etableret under en tidligere anmodning.
For at (gen-)bruge en forberedt sætning direkte skal du bruge identifikatoren for den sætning (og den forbindelse). Når du bruger (php-)postgresql, er dette simpelthen en (forbindelsesmæssigt) unik streng, du sender til pg_execute() , så dit script har ikke noget problem med at få adgang til den erklæring, der tidligere er udarbejdet af en anden instans (ved at bruge den samme forbindelse).
Brug af mysqli eller PDO-mysql du har brug for en ressource/objekt som sætningsidentifikator. Det er noget af et problem, da hverken mysqli- eller pdo-udvidelsen ser ud til at tilbyde en måde at gemme ressourcen i EG(persist_list) mellem anmodninger, og du kan heller ikke genskabe den. Medmindre php-fpm tilbyder sådan en "tjeneste", er det tilsyneladende umuligt at genbruge en mysql-forberedt erklæring direkte.
Alt du kan håbe på er MySQL's forespørgselscache på serversiden . I nyere versioner (se link) kan den genkende erklæringen, når den bruger forberedte erklæringer. Men selv da genbruger den ikke den faktiske udarbejdede erklæring:

Så hvis jeg ikke tager fejl, kan du i øjeblikket ikke genbruge en mysql-erklæring, der er udarbejdet under en tidligere anmodning i php.



  1. MySQL-lagrede procedurer eller php-kode?

  2. En oversigt over JOIN-metoderne i PostgreSQL

  3. lastInsertId virker ikke i Postgresql

  4. hvordan man automatisk justerer cellebredden i fpdf ved hjælp af php og mysql