2012-05-16 9 views
10

PDO ha l'opzione PDO::ATTR_EMULATE_PREPARES che controlla se le istruzioni preparate devono essere emulate solo se non sono supportate dal DB o sempre. Tuttavia, non menziona se le emula sempre per impostazione predefinita o meno.Il PDO utilizza sempre istruzioni preparate emulate per impostazione predefinita?

Di solito si potrebbe supporre che l'emulazione viene utilizzato solo se necessario, ma dal momento che è PHP nulla può essere assunto solo perché è sano di mente ...

+2

Si può dirmi cosa significa emulazione? E quanto può essere BAD? – Shubham

+1

Durante la chiamata '-> prepare()' non ci sarà alcun controllo degli errori e PDO deve sfuggire ai parametri invece di trasmetterli separatamente al database. Inoltre non trarrà profitto dalle ottimizzazioni che il database potrebbe essere in grado di fare quando preparate una dichiarazione e la eseguono più volte. – ThiefMaster

risposta

14

Dipende dal driver di database. Sono always emulati di default per MySql (anche se ovviamente è possibile disattivare l'opzione manualmente); in Postgres l'impostazione predefinita corretta è detected dynamically.

+1

Questo è confuso. Il tuo codice di riferimento dice qualcosa di diverso dalla documentazione: _PDO_MYSQL trarrà vantaggio dal supporto di istruzioni nativo preparato presente in MySQL 4.1 e versioni successive. Se stai usando una versione precedente delle librerie client mysql, PDO le emulerà per te ._ (http://www.php.net/manual/en/ref.pdo-mysql.php) – CodeZombie

+3

@ZombieHunter: Se il codice dice qualcosa di diverso dalla documentazione, quindi ovviamente la documentazione (o la sua interpretazione) è sbagliata. In questo caso specifico IMHO dovrebbe leggere "** può ** sfruttare". I documenti sono sempre sbagliati (PHP è più spesso di altri, come è tipico ... * sigh *); Ho perso il conto di quante volte ho scoperto * menzogne ​​evidenti * nella documentazione stessa. – Jon

+1

Ero consapevole del fatto che posso piuttosto fidarmi del codice a cui si fa riferimento rispetto alla documentazione ma non potevo crederci. Questo è davvero un problema, devi controllare tutto in PHP prima di crederci: -/ – CodeZombie