この記事では主に 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,'dabao','26')"; try{ $res=$pdo->exec($sql); }catch (PDOException $e){ echo $e->getMessage(); } //$res=$pdo->exec($sql); //if($res){ // echo 'OK'; //}else{ // echo $pdo->errorCode(); // echo '<br/>'; // 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['id']."------".$val['name']."------".$val['age']."<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 サイトの他の関連記事を参照してください。