2012-04-13 6 views
21

Cercando di imparare qualcosa di nuovo - in particolare cercando di scegliere se utilizzare o MySQLiPDO per i progetti futuri quando si lavora con MySQL - sono incappato in this page che mostra una panoramica di opzioni disponibili per me.Che cosa sono le istruzioni preparate sul lato client?

Nella parte inferiore di questa pagina è presente una tabella che confronta le funzionalità dei tre principali metodi di comunicazione con mysql. Nella riga "API supporta client-side prepared statement", si dice che supporta questa DOP e MySQLi non lo fa.

so cosa preparate dichiarazioni sono. La risposta a this question è un semplice esempio di ciò che ritengo sia una dichiarazione preparata sul lato server. E PHP è un linguaggio lato server, che a sua volta dovrebbe significare che non importa se le dichiarazioni preparate sul lato client sono disponibili o meno. Ma questo mi fa chiedere perché sia ​​elencato nel manuale PHP.

Dunque, quali sono sul lato client istruzioni preparate?

+3

Presumo che ciò utilizza client/server in un contesto diverso rispetto al modello web - cioè MySQL è il server e PHP è il cliente in questo contesto. Anche se sono entrambi sullo stesso computer. –

+2

Certamente questo si riferisce a [ 'DOP :: ATTR_EMULATE_PREPARES'] (http://www.php.net/manual/en/pdo.setattribute.php), un ambiente che simula istruzioni preparate con interpolazione e fuggire. Questo viene fatto nella libreria, quindi tecnicamente lato client, prima che le richieste vengano trasferite al server DB. – mario

+0

@MattFenwick Anche se questo potrebbe rendere perfetto senso, questo non spiega il motivo per cui la stessa tabella indica il supporto per le istruzioni preparate sul lato server come per tutte le librerie, ma solo uno di essi supporta lato client se accettiamo la premessa che PHP è il cliente. – Repox

risposta

28

Ovviamente, le istruzioni preparate sul lato client sono istruzioni che vengono preparate dal client, anziché dal server.

DOP è un livello di astrazione di accesso ai dati che supporta più interfacce DBMS (driver), alcuni dei quali supportano le dichiarazioni sul lato server preparati (ad esempio: MySQL 4.1+), alcuni dei quali non lo fanno (per esempio: MySQL 3) .

Nel caso in cui il driver PDO non supporti le istruzioni preparate sul lato server, PDO emula sul lato client e utilizza l'interfaccia di query generica per eseguirle.

Il motivo per cui MySQLi non li supporta è semplice: MySQLi è un'estensione specifica per MySQL, un RDBMS che supporta effettivamente le istruzioni preparate sul lato server, quindi non c'è motivo di emularle.

13

Come è stato detto nei commenti, in questo caso "client" si riferisce a PHP e "server" a MySQL. PDO supporta database diversi da MySQL. Non tutti questi database/driver db supportano le istruzioni preparate in modo nativo, e in questi casi PDO emulerà tali istruzioni. MySQLi non lo farà (non so per certo quando dovrebbe farlo - forse quando si tratta di un vecchio driver MySQL?).

Un altro fattore che potreste voler considerare - alcuni framework PHP richiedono PDO e non supportano mysqli.

2

Con PDO, è possibile utilizzare le istruzioni preparate (in codice) indipendentemente dal fatto che il database con cui ci si connette con PDO le supporti o meno.

Se il server gestisce istruzioni preparate, PDO consentirà al server di gestirle (lato server). In caso contrario, PDO emula semplicemente le istruzioni preparate all'interno di PDO (lato client), ma finisce per dover inviare ogni query al server.