PHP MySQL istruzioni preparate
istruzioni preparate per evitare l'iniezione di MySQL è molto utile.
le istruzioni preparate e parametri associati
dichiarazioni preparate per l'esecuzione di una pluralità di la stessa istruzione SQL, ed eseguire in modo più efficiente.
Opere di istruzioni preparate come segue:
Pretrattamento: Creare un comunicato modello SQL inviata al database. Il valore del parametro riservato "?" Mark. Ad esempio:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
analisi del database, compilare, eseguire l'ottimizzazione delle query SQL dichiarazioni template, e memorizza il risultato non viene emesso.
Esecuzione: Infine, i valori dei parametri passati all'applicazione vincolante ( "?" Mark), Database esegue le istruzioni. Le applicazioni possono essere eseguite più volte, se il valore del parametro non è la stessa.
Rispetto alla esecuzione diretta delle istruzioni SQL, dichiarazione preparata ha due vantaggi principali:
prepared statement riduce drasticamente i tempi di analisi, solo una query (anche se vengono eseguite le istruzioni).
parametri legati per ridurre la larghezza di banda del server, è sufficiente inviare una query con parametri anziché l'intera istruzione.
prepared statement contro SQL injection è molto utile, perché dopo utilizzare protocolli diversi per inviare i valori dei parametri per garantire la legittimità dei dati.
MySQLi istruzioni preparate
L'esempio seguente utilizza il MySQLi in una dichiarazione preparata, e si legano i parametri corrispondenti:
Esempi (MySQLi utilizzando istruzioni preparate)
$ Nomeserver = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "myDB";
// Crea collegamento
$ Conn = new mysqli ($ servername, $ username, $ password, $ dbname);
// Prova connessione
if ($ conn-> connect_error) {
die ( "Connessione fallita:" $ conn-> connect_error.);
}
// Pretrattamento e vincolante
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nome, cognome, e-mail) VALORI (,,) ???");
$ Stmt-> bind_param ( "sss", $ Nome, cognome $, $ e-mail);
// imposta i parametri ed effettuare
$ Nome = "John";
$ Cognome = "Rossi";
$ Email = "john@example.com";
$ Stmt-> execute ();
$ Nome = "Maria";
$ Cognome = "Moe";
$ Email = "mary@example.com";
$ Stmt-> execute ();
$ Nome = "Julie";
$ Cognome = "Dooley";
$ Email = "julie@example.com";
$ Stmt-> execute ();
echo "Il nuovo record viene inserito con successo";
$ Stmt-> close ();
$ Conn-> close ();
?>
Analisi ciascuna riga di codice nei seguenti esempi:
In istruzioni SQL, si usa il punto interrogativo (?), Qui possiamo sostituire il punto interrogativo intero, stringa, a doppia precisione in virgola mobile, e valori booleani.
Quindi, diamo un'occhiata a bind_param () la funzione:
I parametri SQL funzione bind, e raccontano il valore del parametro del database. "sss" tipi di dati dei parametri di elaborazione colonna per i restanti parametri. s carattere indica al database che la stringa di parametri.
Ci sono quattro tipi di parametri:
- I - intero (intero)
- d - doppia (punto doppia precisione floating)
- s - string (stringa)
- b - BLOB (binary large object: grandi oggetti binari)
Ogni parametro è necessario per specificare il tipo.
Il parametro di tipo di dati indica al database, è possibile ridurre il rischio di SQL injection.
Nota: Se si desidera inserire dati aggiuntivi (input dell'utente), la verifica dei dati è molto importante. |
DOP istruzioni preparate in
I seguenti esempi che utilizzano istruzioni preparate in DOP e parametri vincolanti:
Esempi (DOP utilizzando istruzioni preparate)
$ Nomeserver = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "myDBPDO";
try {
$ Conn = new PDO ( "mysql: host = $ servername; dbname = $ dbname", $ username, $ password);
// Imposta l'eccezione modalità di errore DOP
$ Conn-> setAttribute (DOP :: ATTR_ERRMODE, DOP :: ERRMODE_EXCEPTION);
// parametri legano pretrattamento e SQL
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (nome, cognome, e-mail)
VALORI (: cognome ,: cognome ,: e-mail) ");
$ Stmt-> BindParam ( ': cognome', $ firstname);
$ Stmt-> BindParam ( ': Cognome', $ cognome);
$ Stmt-> BindParam ( ': E-mail', $ e-mail);
// Fila Inserire
$ Nome = "John";
$ Cognome = "Rossi";
$ Email = "john@example.com";
$ Stmt-> execute ();
// Inserire un'altra riga
$ Nome = "Maria";
$ Cognome = "Moe";
$ Email = "mary@example.com";
$ Stmt-> execute ();
// Inserire un'altra riga
$ Nome = "Julie";
$ Cognome = "Dooley";
$ Email = "julie@example.com";
$ Stmt-> execute ();
echo "Il nuovo record viene inserito con successo";
}
catch (PDOException $ e)
{
it Echo $ sql "<br>" $ e-> getMessage ();
}
$ Conn = null;
?>