sql >> Databáze >  >> RDS >> Mysql

Jsou připravené příkazy ukládány do mezipaměti na straně serveru při vícenásobném načtení stránky pomocí PHP?

Když je požadavek doručen, php „vyčistí“ instanci a uvolní zdroje a další proměnné. To se provádí v několika krocích. Protože fastcgi udržuje proces naživu po požadavku, nejsou provedeny všechny kroky a neuvolní se všechna paměť. Existuje např. EG(persistent_list), který používá mysql_pconnect() , pg_pconnect() , ... Tento seznam se mezi požadavky nevyprázdní, dokud je proces aktivní (může být, v závislosti na skutečné implementaci, ale to by odporovalo účelu EG(persistent_list)). Pokud používáte trvalá připojení, váš skript může získat "znovu použité" připojení vytvořené během předchozího požadavku.
Abyste mohli (znovu) použít připravený příkaz přímo, potřebujete identifikátor pro tento příkaz (a toto připojení). Při použití (php-)postgresql je to jednoduše (po připojení) jedinečný řetězec, který předáte do pg_execute() , takže váš skript nemá problém získat přístup k výpisu dříve připravenému jinou instancí (pomocí stejného připojení).
Pomocí mysqli nebo PDO-mysql potřebujete zdroj/objekt jako identifikátor příkazu. To je trochu problém, protože ani mysqli, ani rozšíření pdo zřejmě nenabízejí způsob uložení zdroje v EG(persist_list) mezi požadavky a ani jej nemůžete znovu vytvořit. Pokud php-fpm nenabízí takovou "službu", zdá se nemožné znovu použít přímo připravený příkaz mysql.
Vše, v co můžete doufat, je MySQL mezipaměť dotazů na straně serveru . V posledních verzích (viz odkaz) může rozpoznat výpis při použití připravených výpisů. Ale ani pak znovu nepoužije skutečné připravené prohlášení:

Takže, pokud se nepletu, v současné době nemůžete znovu použít příkaz mysql připravený během předchozího požadavku v php.



  1. Pochopení ztráty událostí s prodlouženými událostmi

  2. Hlavní použití sys.dm_os_wait_stats

  3. Získávání posledního záznamu z mysql

  4. Jak $_POST dynamicky přiřazenou hodnotu v PHP?