Когато се обслужи заявка, php "почиства" екземпляра и освобождава ресурси и други променливи. Това се прави на няколко стъпки. Тъй като fastcgi поддържа процеса жив след заявка, не всички стъпки се изпълняват и не цялата памет се освобождава. Има напр. EG(persistent_list), който се използва от mysql_pconnect()
, pg_pconnect()
, ... Този списък не се изпразва между заявките, докато процесът е жив (може да бъде, в зависимост от действителната реализация, но това би противоречило на целта на EG(persistent_list)). Ако използвате постоянни връзки, вашият скрипт може да получи "повторно използвана" връзка, установена по време на предишна заявка.
За да (повторно) използвате директно подготвен израз, ви е необходим идентификаторът за този израз (и тази връзка). Когато използвате (php-)postgresql, това е просто уникален низ (по отношение на връзката), който предавате на pg_execute() , така че вашият скрипт няма проблем да получи достъп до изявлението, предварително подготвено от друг екземпляр (използвайки същата връзка).
Използвайки mysqli
или PDO-mysql
имате нужда от ресурс/обект като идентификатор на израза. Това е някакъв проблем, тъй като нито mysqli, нито разширението pdo изглежда предлагат начин за съхраняване на ресурса в EG(persist_list) между заявките и вие също не можете да го създадете отново. Освен ако php-fpm не предлага такава "услуга", изглежда невъзможно да се използва повторно подготвено изявление за mysql директно.
Всичко, на което можете да се надявате, е кеш на заявки от страна на сървъра
. В последните версии (вижте връзката) той може да разпознае изявлението, когато използва подготвени оператори. Но дори и тогава той не използва повторно действително подготвеното изявление:
Така че, ако не се лъжа, в момента не можете да използвате повторно изявление на mysql, изготвено по време на предишна заявка в php.