Maison >développement back-end >tutoriel php >php_pdo implémente les instructions préparées

php_pdo implémente les instructions préparées

墨辰丷
墨辰丷original
2018-05-30 15:59:401802parcourir

De nombreuses bases de données matures prennent en charge le concept de déclarations préparées. Le prétraitement peut être implémenté de différentes manières.Voici une introduction détaillée à l'instruction de prétraitement php_pdo à travers cet article. L'article la présente en détail à travers un exemple de code. Les amis dans le besoin peuvent s'y référer.

1. Le prétraitement des instructions peut apporter deux avantages majeurs :

1 La requête ne doit être analysée (ou prétraitée) qu'une seule fois, mais elle peut l'être. utilisé avec le même Ou exécuter plusieurs fois avec des paramètres différents. Lorsqu'une requête est prête, la base de données analysera, compilera et optimisera
un plan pour exécuter la requête. Pour les requêtes complexes, ce processus prend beaucoup de temps, et si la même requête doit être répétée plusieurs fois avec des paramètres différents, ce processus ralentira considérablement l'application. En utilisant des instructions préparées, vous pouvez éviter les cycles répétés d’analyse/compilation/optimisation. En bref, les instructions préparées utilisent moins de ressources et s'exécutent plus rapidement grâce à
.

2. Les paramètres fournis à la déclaration préparée n'ont pas besoin d'être mis entre guillemets, le pilote les traitera automatiquement. Si votre application utilise uniquement des instructions préparées, vous pouvez être sûr qu'aucune injection SQL

ne se produira. (Cependant, si d'autres parties de la requête sont construites à partir d'entrées non échappées, il existe toujours un risque d'injection SQL).

2. Exemples de prétraitement :

<?php

//?号式的预处理语句 一共有3种绑定方式
//1.连接数据库 
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}

//2.预处理的SQL语句
$sql = "insert into stu(id,name,sex,age) values(?,?,?,?)";
$stmt = $pdo->prepare($sql);

//3.对?号的参数绑定
//(第一种绑定方式)

/* $stmt->bindValue(1,null);
$stmt->bindValue(2,&#39;test55&#39;);
$stmt->bindValue(3,&#39;w&#39;);
$stmt->bindValue(4,22); */

//第二种绑定方式
/* $stmt->bindParam(1,$id);
$stmt->bindParam(2,$name);
$stmt->bindParam(3,$sex);
$stmt->bindParam(4,$age);
$id=null;
$name="test66";
$sex="m";
$age=33; */

//第三种绑定方式
//$stmt->execute(array(null,&#39;test77&#39;,&#39;22&#39;,55)); 
//4.执行

$stmt->execute(array(null,&#39;test77&#39;,&#39;22&#39;,55));

echo $stmt->rowCount();

<?php

//别名式号式的预处理语句 一共有3种绑定方式
//1.连接数据库 
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}

//2.预处理的SQL语句
$sql = "insert into stu(id,name,sex,age) values(:id,:name,:sex,:age)";
$stmt = $pdo->prepare($sql);

//3.对?号的参数绑定
//(第一种绑定方式)
/* $stmt->bindValue("id",null);
$stmt->bindValue("name",&#39;ceshi1&#39;);
$stmt->bindValue("sex",&#39;w&#39;);
$stmt->bindValue("age",22); */

//第二种绑定方式
/* $stmt->bindParam("id",$id);
$stmt->bindParam("name",$name);
$stmt->bindParam("sex",$sex);
$stmt->bindParam("age",$age);
$id=null;
$name="ceshi2";
$sex="m";
$age=33; */

//第三种绑定方式
//$stmt->execute(array(null,&#39;test77&#39;,&#39;22&#39;,55)); 
//4.执行

$stmt->execute(array("id"=>null,"name"=>"ceshi3","sex"=>"w","age"=>66));

echo $stmt->rowCount();

<?php

//采用预处理SQL执行查询,并采用绑定结果方式输出
//1.连接数据库 
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}

//2.预处理的SQL语句
$sql = "select id,name,sex,age from stu";
$stmt = $pdo->prepare($sql);
//3.执行
$stmt->execute();

$stmt->bindColumn(1,$id);
$stmt->bindColumn(2,$name);
$stmt->bindColumn("sex",$sex);
$stmt->bindColumn("age",$age);

while($row=$stmt->fetch(PDO::FETCH_COLUMN)){
  echo "{$id}:{$name}:{$sex}:{$age}<br>";
}
/* foreach($stmt as $row){
  echo $row[&#39;id&#39;]."--------".$row[&#39;name&#39;]."<br>";
}
 */

Meilleur moyen :

//1.连接数据库 
try{
  $pdo = new PDO("mysql:host=localhost;dbname=jikexueyuan","root","");
}catch(PDOException $e){
  die("数据库连接失败".$e->getMessage());
}

//2.预处理的SQL语句
$sql = &#39;select catid,catname,catdir from cy_category where parentid = :parentid&#39;;
$stmt = $pdo->prepare($sql);
$params = array(
  &#39;parentid&#39; => $subcatid
);
$stmt->execute($params); 
//$row = $stm->fetchAll(PDO::FETCH_ASSOC);
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
  var_dump($row);
  echo "<br>";
}

Lot de prétraitement exemple d'opération :

<?php
//用预处理语句进行重复插入
//下面例子通过用 name 和 value 替代相应的命名占位符来执行一个插入查询
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(&#39;:name&#39;, $name);
$stmt->bindParam(&#39;:value&#39;, $value);

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

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

//用预处理语句进行重复插入
//下面例子通过用 name 和 value 取代 ? 占位符的位置来执行一条插入查询。
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

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

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

//使用预处理语句获取数据
//下面例子获取数据基于键值已提供的形式。用户的输入被自动用引号括起来,因此不会有 SQL 注入攻击的危险。
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET[&#39;name&#39;]))) {
 while ($row = $stmt->fetch()) {
  print_r($row);
 }
}
?>

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.


Recommandations associées :

Implémentation PHP de méthodes de classe publique d'aide à la vérification régulière

Méthode PHP pour implémenter la complétion des balises HTML et le filtrage du contenu Web

phpSolution au problème selon lequel MyAdmin ne peut pas se connecter

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn