Latest web development tutorials
×

PHP cours

PHP cours PHP Brève introduction PHP installer PHP grammaire PHP variable PHP echo/print PHP Types de données PHP constante PHP chaîne PHP opérateurs PHP If...Else PHP Switch PHP tableau PHP Tri d'un tableau PHP Superglobales PHP While circulation PHP For circulation PHP fonction PHP Variables magiques PHP Namespaces PHP Object-Oriented

PHP forme

PHP forme PHP Authentification Forms PHP forme - Les champs obligatoires PHP forme - email de vérification et d'URL PHP Complète instance de formulaire PHP $_GET variable PHP $_POST variable

PHP Tutorial avancée

PHP Les tableaux multidimensionnels PHP date PHP contenir PHP fichier PHP File Upload PHP Cookie PHP Session PHP E-mail PHP sécurité E-mail PHP Error PHP Exception PHP filtre PHP filtre avancé PHP JSON

PHP 7 Nouvelles fonctionnalités

PHP 7 Nouvelles fonctionnalités

PHP Base de données

PHP MySQL Brève introduction PHP MySQL raccordement PHP MySQL La création d'une base de données PHP MySQL Créer une table de données PHP MySQL Insérer des données PHP MySQL Insérez des données multiples PHP MySQL Déclarations préparées PHP MySQL Lire les données 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 Brève introduction AJAX PHP AJAX Base de données AJAX XML AJAX Recherche en temps réel AJAX RSS Reader AJAX vote

PHP Manuel de référence

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 Traitement de l'image PHP RESTful

PHP PDO préparé des déclarations et des procédures stockées

Manuel PHP PDO Référence Manuel PHP PDO Référence

De nombreuses bases de données plus matures soutiennent le concept de déclarations préparées.

Qu'est-ce que les instructions préparées? Pensez-y comme un modèle compilé que vous souhaitez exécuter SQL, qui peut être personnalisé à l'aide des paramètres variables. Les instructions préparées offrent deux avantages majeurs:

  • Rechercher uniquement décide (ou prétraitement) une fois, mais peuvent être exécutées plusieurs fois avec les paramètres identiques ou différents. Lorsque la requête est prêt, la base de données à analyser, compiler et exécuter le plan d'optimisation des requêtes. Pour les requêtes complexes, ce processus prend beaucoup de temps, si vous avez besoin d'être répété plusieurs fois avec des paramètres différents de la même requête, le processus permettra de réduire considérablement la vitesse de l'application. En utilisant l'éviter de déclaration préparée en répétant l'analyse / compiler / cycle d'optimisation. En bref, les requêtes préparées utilisent moins de ressources et donc courir plus vite.
  • Fournir des paramètres aux états préparés ne doivent pas utiliser des guillemets, le pilote sera géré automatiquement. Si l'application utilise uniquement des déclarations préparées, nous pouvons veiller à ce qu'aucune injection SQL. (Cependant, si d'autres parties de la requête ne sont pas échappés de l'entrée à construire, alors il y a toujours le risque d'injection SQL).

Les instructions préparées si utiles qu'ils disposent seulement le traitement analogique lorsque le conducteur ne prend pas en charge le PDO. Cela garantit que, indépendamment du fait que la base de données a une fonction, vous pouvez vous assurer que les applications peuvent utiliser les mêmes modèles d'accès aux données.

insertion PreparedStatements répétée

L'exemple suivant en remplaçant le nom espace réservé approprié avec le nom et la valeur d'exécution d'une requête d'insertion

<?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();
?>

insertion PreparedStatements répétée

L'exemple suivant par le nom et la valeur en remplaçant? Placeholders pour exécuter une requête d'insertion.

<?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();
?>

Obtenir des données en utilisant des instructions préparées

L'exemple suivant sous la forme d'accès à base de clés à des données déjà fournies. Entrée utilisateur est automatiquement placé entre guillemets, donc il n'y a pas de risque de attaques par injection SQL.

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

Si le support de pilote de base de données, l'application peut également lier des paramètres d'entrée et de sortie des paramètres de sortie sont généralement utilisés pour obtenir des valeurs de la procédure stockée. Les paramètres de sortie à utiliser que les paramètres d'entrée pour être un peu plus compliqué, parce que quand un paramètre de sortie de liaison, vous devez connaître les paramètres d'une longueur donnée. Si la valeur du paramètre est supérieure aux recommandations de liaison de la longueur, il va générer une erreur.

Appel d'une procédure stockée avec un paramètre de sortie

<?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";
?>

Vous pouvez également spécifier les valeurs des paramètres d'entrée et de sortie, la syntaxe est similaire à des paramètres de sortie. Dans l'exemple suivant, la chaîne "bonjour" est passé à la procédure stockée lors du retour de la procédure stockée, bonjour est remplacée par la valeur de retour de la procédure stockée.

Avec entrée / paramètres de sortie pour appeler une procédure stockée

<?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";
?>

Utilisation invalide de marqueur

<?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]%"));
?>

Manuel PHP PDO Référence Manuel PHP PDO Référence