Latest web development tutorials
×

PHP corso

PHP corso PHP breve introduzione PHP installare PHP grammatica PHP variabile PHP echo/print PHP Tipi di dati PHP costante PHP stringa PHP operatori PHP If...Else PHP Switch PHP schieramento PHP Ordinamento di un array PHP superglobals PHP While circolazione PHP For circolazione PHP funzione PHP Variabili magici PHP Namespace PHP Object-Oriented

PHP modulo

PHP modulo PHP Forms Authentication PHP modulo - I campi obbligatori PHP modulo - e-mail di verifica e l'URL PHP esempio forma completa PHP $_GET variabile PHP $_POST variabile

PHP Tutorial avanzato

PHP array multidimensionali PHP data PHP contenere PHP file PHP File Upload PHP Cookie PHP Session PHP E-mail PHP sicurezza E-mail PHP Error PHP Exception PHP filtro PHP Filtro avanzato PHP JSON

PHP 7 nuove funzionalità

PHP 7 nuove funzionalità

PHP Database

PHP MySQL breve introduzione PHP MySQL collegamento PHP MySQL Creazione di un database PHP MySQL Creare una tabella di dati PHP MySQL inserire i dati PHP MySQL Inserire più dati PHP MySQL prepared statement PHP MySQL leggere i dati PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX breve introduzione AJAX PHP AJAX Database AJAX XML AJAX ricerca in tempo reale AJAX RSS Reader AJAX voto

PHP Manuale di riferimento

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Elaborazione immagini PHP RESTful

PHP DOP istruzioni preparate e stored procedure

Manuale PHP DOP di riferimento Manuale PHP DOP di riferimento

Molti database più maturi supportano il concetto di dichiarazioni preparate.

Che cosa è istruzioni preparate? Pensate a come un modello compilato che si desidera eseguire SQL, che può essere personalizzato utilizzando parametri variabili. istruzioni preparate offrono due vantaggi principali:

  • Query solo risolve (o pre-trattamento) una volta, ma può essere eseguito più volte con gli stessi o differenti parametri. Quando la query è pronto, il database sarà analizzare, compilare ed eseguire il piano di ottimizzazione delle query. Per le query complesse, questo processo richiede molto tempo, se hai bisogno di essere ripetuto molte volte con parametri diversi la stessa query, allora il processo ridurrà di molto la velocità dell'applicazione. Usando il evitare di dichiarazione preparata ripetendo analizzare / compilare ciclo / ottimizzare. In breve, preparati dichiarazioni utilizzano meno risorse e quindi più veloci.
  • Fornire i parametri per le istruzioni preparate non è necessario utilizzare le virgolette, il driver sarà gestito automaticamente. Se l'applicazione utilizza solo le istruzioni preparate, siamo in grado di garantire che nessun tipo SQL injection. (Tuttavia, se altre parti della query non venga neutralizzato dall'ingresso di costruire, allora vi è ancora il rischio di iniezione SQL).

istruzioni preparate così utile che si presentano solo la elaborazione analogica quando il conducente non supporta la DOP. Ciò assicura che, indipendentemente dal fatto che il database ha una funzione, è possibile garantire che le applicazioni possono utilizzare gli stessi modelli di accesso ai dati.

PreparedStatements ripetuto inserimento

Il seguente esempio sostituendo il nome segnaposto appropriata con il nome e il valore per eseguire una query di inserimento

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

//  用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

PreparedStatements ripetuto inserimento

Il seguente esempio sostituendo nome e il valore? Segnaposto per eseguire una query di inserimento.

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

Ottenere i dati utilizzando le istruzioni preparate

Il seguente esempio sotto forma di accesso basata su chiave ai dati già disponibile. L'input dell'utente è racchiuso automaticamente tra virgolette, quindi non c'è rischio di attacchi di SQL injection.

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

Se il supporto driver di database, applicazione può anche legare parametri di ingresso e di uscita parametri di output sono tipicamente utilizzati per ottenere i valori dalla stored procedure. Parametri di uscita da usare rispetto parametri di input per essere un po 'più complicato, perché quando l'associazione di un parametro di output, è necessario conoscere i parametri di una data lunghezza. Se il valore del parametro è superiore alle raccomandazioni vincolanti della lunghezza, si genera un errore.

Chiamata di una stored procedure con un parametro di output

<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $return_value\n";
?>

È inoltre possibile specificare sia valori di ingresso e di uscita dei parametri, la sintassi è simile a parametri di output. Nel prossimo esempio, la stringa "ciao" è passato alla stored procedure quando i rendimenti stored procedure, ciao viene sostituito con il valore di ritorno della stored procedure.

Con l'input / output per i parametri di chiamare una stored procedure

<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $value\n";
?>

Utilizzo non valido di segnaposto

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// 占位符必须被用在整个值的位置
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>

Manuale PHP DOP di riferimento Manuale PHP DOP di riferimento