English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

معالجة الأمان في PDO وتنفيذ المعاملات

المعاملة (Transaction) هي وظيفة مهمة جدًا في معالجة قواعد البيانات، تتيح لك حجز سطر أو سلسلة من أوامر SQL، ثم تنفيذها معًا، وفي أثناء التنفيذ، إذا فشلت أي منها، يمكن استعادة جميع التغييرات التي تم تنفيذها. إذا تم تنفيذها بنجاح، فإن هذه السلسلة من العمليات ستكون دائمة. تحل المعاملة مشكلة عدم التوافق عند معالجة قواعد البيانات. كما أن تنفيذ المعاملات لكميات كبيرة من البيانات يمكن أن يزيد من كفاءة التنفيذ بشكل كبير.

معالجة المعاملات لها أربعة خصائص: الأتمومية، التوافقية، الاستقلالية، والمتانة. ليست جميع قواعد البيانات تدعم معالجة المعاملات، يقدم PDO دعمًا للمعاملات لقواعد البيانات التي يمكن تنفيذ معالجة المعاملات.

الجزء الأول. معالجة الاستثناءات 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); 
} 
  die("فشل في الاتصال بقاعدة البيانات".$e->getMessage()); 
} 
$sql="INSERT INTO user VALUES(null,'dabao','26')"; 
try{ 
  $res=$pdo->exec($sql); 
} 
  echo $e->getMessage(); 
} 
//$res=$pdo->exec($sql); 
//if($res){ 
//  echo 'OK'; 
//}else{ 
//  echo $pdo->errorCode(); 
//  echo '<br/>'; 
//  print_r($pdo->errorInfo()); 
//} 

القسم الثاني. طرق PDO المعالجة

1) prepare() // يستخدم لتنفيذ جملة استعلام SQL، يعود PDOStatement

2) bindValue() // ربط القيم على المعلمات المحددة، يعود قيمة منطقية

3) bindParam() // ربط المعلمات على النقاط المحجوزة في الاستعلام، يعود قيمة منطقية

4) bindColumn() // لتحديد اسم العمود مع اسم المتغير المحدد

5) execute() // تنفيذ جملة معالجة جاهزة، يعود قيمة منطقية

6) rowCount() // يعود عدد الصفوف المتأثرة باستخدام جملات الإضافة، الحذف، التعديل، البحث

<?php 
/** 
 * جملة معالجة الأسئلة الموجودة داخل الأسئلة، هناك ثلاثة طرق ربط 
 */ 
//1. الاتصال بالقاعدة البيانات 
try{ 
  $pdo=new PDO("mysql:host=localhost;dbname=myapp","root",""); 
} 
  die("فشل في الاتصال بقاعدة البيانات".$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",""); 
} 
  die("فشل في الاتصال بقاعدة البيانات".$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",""); 
} 
  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']."
"; }

三.事务处理操作方法介绍
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); 
} 
  die("فشل في الاتصال بقاعدة البيانات".$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(); 
} 
  die("فشل في تنفيذ".$e->getMessage()); 
  //إعادة تعيين العملية 
  $pdo->roolback(); 
} 

هذا هو نهاية محتويات هذا المقال، آمل أن تكون قد ساعدتكم في التعلم، وأتمنى أن تشجعوا تعليمات呐喊.

بيان: محتويات هذا المقال تم جمعها من الإنترنت، حقوق الطبع والنشر تخص المالك الأصلي، المحتويات تم تقديمها من قبل مستخدمي الإنترنت بشكل متعاوني وتم تحميلها بشكل مستقل، هذا الموقع لا يملك حقوق الملكية، لم يتم تعديل المحتويات بشكل إنساني، ولا يتحمل أي مسؤولية قانونية مرتبطة بذلك. إذا كنت قد وجدت محتوى يشتبه في حقوق الطبع والنشر، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' ب '@') للإبلاغ، وقدم الأدلة ذات الصلة، وسيتم حذف المحتويات المشبوهة بشكل فوري إذا تم التحقق منها.

التي قد تعجبك