PDOセキュリティ処理およびトランザクション処理メソッド

墨辰丷
リリース: 2023-03-28 15:12:01
オリジナル
1230 人が閲覧しました

この記事では主に PDO のセキュリティ処理とトランザクション処理方法を紹介します。興味のある方は参考にしてください。

トランザクションは、データベースの操作において非常に重要な機能であり、1 つまたは一連の SQL ステートメントをスケジュールし、実行プロセス中にそれらのステートメントの 1 つが実行に失敗した場合に、それらをまとめて実行できます。変更された操作が正常に実行されると、トランザクションは永続的に有効になり、データベース操作時の非同期の問題が解決されると同時に、トランザクションを通じて大量のデータを実行する際の実行効率が向上します。

トランザクション処理には、原子性、一貫性、独立性、耐久性という 4 つの特性があります。すべてのデータベースがトランザクション処理をサポートしているわけではありません。PDO は、トランザクション処理を実行できるデータベースに対してトランザクション サポートを提供します。

1. PDO 例外処理
PDO::ATTR_ERRMODE

1) PDO::ATTR_ERRMODE//エラーを報告しない (無視) (0)

2) PDO::ERRMODE_WARNING
//警告あり異常な方法でエラーを報告する(1)

3) PDO::ERRMODE_EXCEPTION //異常な方法でエラーを報告する(2)

<?php 
//默认是PDO::ATTR_ERRMODE 不报错误(忽略)(0),需要用errorCode()、errorInfo() 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
//  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); 
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
}catch (PDOException $e){ 
  die("fail to connect db".$e->getMessage()); 
} 
$sql="INSERT INTO user VALUES(null,&#39;dabao&#39;,&#39;26&#39;)"; 
try{ 
  $res=$pdo->exec($sql); 
}catch (PDOException $e){ 
  echo $e->getMessage(); 
} 
//$res=$pdo->exec($sql); 
//if($res){ 
//  echo &#39;OK&#39;; 
//}else{ 
//  echo $pdo->errorCode(); 
//  echo &#39;<br/>&#39;; 
//  print_r($pdo->errorInfo()); 
//}
ログイン後にコピー

2. PDOの前処理メソッド

1. ) prepare() // クエリ SQL ステートメントを実行し、PDOStatement オブジェクトを返すために使用されます

2) bindingValue() // 値を対応するパラメータにバインドし、ブール値を返します

3) bindingParam() //クエリのプレースホルダーで、ブール値を返します

4) bindingColumn() // 列名と指定された変数名を照合するために使用されます

5)execute() // 準備されたプリペアドステートメントを実行し、 return Boolean value

6) rowCount() // 追加、削除、変更、およびチェック操作ステートメントの使用後に影響を受ける行の合計数を返します

<?php 
/** 
 * ?号式的预处理语句,共有三种绑定方式 
 */ 
 
//1.连接数据库 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
}catch (PDOException $e){ 
  die("fail to connect db".$e->getMessage()); 
} 
 
//2.预处理的SQL语句 
$sql="INSERT INTO users(id,name,age) VALUES(?,?,?)"; 
$stmt=$pdo->prepare($sql); 
 
//3.对?号的参数进行绑定 
$id=null; 
$name="test103"; 
$age=103; 
 
//第一种绑定方式 
//$stmt->bindValue(1,$id); 
//$stmt->bindValue(2,$name); 
//$stmt->bindValue(3,$age); 
 
//第二种绑定方式 
//$stmt->bindParam(1,$id); 
//$stmt->bindParam(2,$name); 
//$stmt->bindParam(3,$age); 
 
//4.执行 
//$stmt->execute(); 
//第三种绑定方式:直接执行数组 
$stmt->execute(array($id,$name,$age)); 
echo $stmt->rowCount();
ログイン後にコピー

<?php 
/** 
 * 别名式的预处理语句,共有三种绑定方式 
 */ 
 
//1.连接数据库 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
}catch (PDOException $e){ 
  die("fail to connect db".$e->getMessage()); 
} 
 
//2.预处理的SQL语句 
$sql="INSERT INTO users(id,name,age) VALUES(:id,:name,:age)"; 
$stmt=$pdo->prepare($sql); 
 
//3.参数进行绑定 
$id=null; 
$name="test203"; 
$age=23; 
 
//第一种绑定方式 
//$stmt->bindValue("id",$id); 
//$stmt->bindValue("name",$name); 
//$stmt->bindValue("age",$age); 
 
//第二种绑定方式 
//$stmt->bindParam("id",$id); 
//$stmt->bindParam("name",$name); 
//$stmt->bindParam("age",$age); 
 
//4.执行 
//$stmt->execute(); 
//第三种绑定方式:直接执行数组 
$stmt->execute(array("id"=>$id,"name"=>$name,"age"=>$age)); 
echo $stmt->rowCount();
ログイン後にコピー

<?php 
/** 
 * 用预处理方式查询数据 
 */ 
//1.连接数据库 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
}catch (PDOException $e){ 
  die("fail to connect mysql".$e->getMessage()); 
} 
 
//2.预处理查询 
$sql="SELECT id,name,age FROM users"; 
$stmt=$pdo->prepare($sql); 
//3.执行 
$stmt->execute(); 
foreach($stmt as $val){ 
  echo $val[&#39;id&#39;]."------".$val[&#39;name&#39;]."------".$val[&#39;age&#39;]."<br/>"; 
}
ログイン後にコピー

3.トランザクション処理の操作メソッドの紹介
1) beginTransaction() //トランザクションをオープンする(ロールバックポイントを作る)

2) commit()
//トランザクションを送信する

3) rollBack() //トランザクションのロールバック操作

<?php 
//1.连接数据库 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
  $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
}catch (PDOException $e){ 
  die("fail to connect db".$e->getMessage()); 
} 
//2.执行数据操作 
try{ 
  //开启事物 
  $pdo->beginTransaction(); 
  $sql="insert into users(id,name,age) VALUES(?,?,?)"; 
  $stmt=$pdo->prepare($sql); 
  //传入参数 
  $stmt->execute(array(null,"test1","21")); 
  $stmt->execute(array(null,"test2","22")); 
  $stmt->execute(array(null,"test3","23")); 
  //提交事物 
  $pdo->commit(); 
}catch (PDOException $e){ 
  die("fail to execute".$e->getMessage()); 
  //事物回滚 
  $pdo->roolback(); 
}
ログイン後にコピー

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。関連する推奨事項:Rush購入のためのハイコンカレンシーリクエストの処理のPHP

セテールの実装


PHP PHP半分 アルゴリズムの事例を見つける 詳しい説明

以上がPDOセキュリティ処理およびトランザクション処理メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート