php MySQL إدخال و تعديل البيانات

php MySQL : إضافة البيانات

آخر تحيين: 10-01-2015

php mysql: تحيين و حذف البيانات php استغلال قاعدة البيانات


INSERT إدخال البيانات


لإضافة بيانات جديدة إلى القاعدة نستعمل إستعلام INSERT INTO .

INSERT INTO mytable ( أسماء حقول الجدول) VALUES (قيم الحقول)
  • INSERT INTO : أَدخِل في
  • mytable : إسم الجدول الذي سنُدخل فيه البيانات
  • VALUES : القيم أي البيانات التي سنُضيفها لكل حقل

لتوضيح الأمر ، سندرس مثال جدول بسيط ، يتكون من ثلاثة حقول فقط . سنسمّيه "users" . و سيظم حقلي : "name" و "age" بالإضافة طبعا إلى حقل "id" .
لا تُنشؤا الجدول ، هذا مثال نظري ، سنرى التطبيق لاحقا .


لإضافة إدخال جديد إلى الجدول ، نقوم أوّلا بتعيين حقول الجدول ، ثم نضيف في "VALUES"القيمة التي نريد إعطاءها لكل حقل .
مثلا لإضافة إسم العضو "omar" و عمره"25" سنة .

INSERT INTO users (name, age) VALUES ("omar",  25 )

هذا مثال بسيط . غالبا ما تكون قيم "VALUES" عبارة عن متغيرات . إن فهمتم الدّرس السابق حول استعمال المتغيرات في الإستعلام ، فنفس الطّريقة سنتّبعها هنا ، لاشيء جديد ، سنغير فقط استعلامنا من "SELECT" إلى "INSERT" . ستكون شيفرتنا السابقة كالآتي :

<?php 
$name = "omar";
$age = 25;

$query= $db->prepare('INSERT INTO users (name, age) VALUES (:name, :age)');
$query->bindValue(':name',$name,PDO::PARAM_STR);
$query->bindValue(':age',$age,PDO::PARAM_INT); 
 
$query->execute();
$query->CloseCursor();
?>

لاحظتم أننا لم نقم بتعيين المُعرّف "id" . لأنه مفتاح أساسي ، نقوم بتحديده أثناء إنشاء الجدول ، كما رأينا . و يأخذ تلقائيا رقما تصاعديّا .
عندما تقومون بإضافة إدخال جديد إلى الجدول ، غالبا ما تودّون معرفة مُعرّف "id" . لهذا الإدخال الآخير . و هذا جد عملي و ستحتاجون إليه كثيرا . إذاً بدل تنفيذ استعلام آخر عن طريق SELECT للحصول عليه . توفر لنا pdo طريقة جد سهلة ، و ذلك باستعمال "lastInsertId"
lastInsertId = آخر مُعرّف "id" ، تم إدخاله في الجدول . نقوم بإضافته مباشرة بعد "execute".

$query->execute();
$last_id = $db->lastInsertId();
<?php 
$name = "omar";
$age = 25;

$query= $db->prepare('INSERT INTO users (name, age) VALUES (:name, :age)');
$query->bindValue(':name',$name,PDO::PARAM_STR);
$query->bindValue(':age',$age,PDO::PARAM_INT); 
 
$query->execute();
$last_id = $db->lastInsertId(); //الإدخال الجديد "id"  الحصول على 
$query->CloseCursor();
?>

لننتقل إلى مثال تطبيقي . سنأخذ جدولنا "employees" و سنحاول إضافة إدخال جديد :


. ستكون شيفرة SQL كالتالي :

INSERT INTO employees (name,gender,task,experience,salary) VALUES ($name,$gender,$task,$experience,$salary)

لاحظوا أن قيم VALUES عبارة عن متغيّرات ، لأننا غالبا ما نحصل عليها عن طريق الإستمارة . سنرى لاحقا كيف سنتعامل مع قاعدة البيانات باستعمال الإستمارات . أمّا الآن ، حتّى لا نخلط الأمور ، همنا هو طريقة استعمال لغة SQL . لهذا سنُعيّن هذه المتغيرات يدويّا

<?php // لا تنسوا أبداً ربط الإتصال بقاعدة البيانات
// تعيين المتغيرات
$name = "فارس";
$gender = "ذكر";
$task = "تقني";
$experience = 3;
$salary = "900";
// إدخال البيانات في الجدول
$query = $db->prepare('INSERT INTO employees 
                      (name, gender, task, experience, salary) VALUES
                      (:name, :gender, :task, :exper, :salary)
                     ');
$query->bindValue(':name',$name,PDO::PARAM_STR);
$query->bindValue(':gender',$gender,PDO::PARAM_STR);
$query->bindValue(':task',$task,PDO::PARAM_STR);
$query->bindValue(':exper',$experience,PDO::PARAM_INT);
$query->bindValue(':salary',$salary,PDO::PARAM_STR);
 
$query->execute();
$last_id = $db->lastInsertId();
$query->CloseCursor();

echo '
<p> مُعرّف الإدخال الجديد ، هو : <br>
      id = '.$last_id.'
</p>';
?>

لاحظوا بأنني ختمت الشيفرة بعرض للمعرف "id" . عند تنفيذكم لهذا الإستعلام أول مرّة ، ستحصلون على قيمة "id = 21" . أي أن آخر سطر في الجدول رقمه هو "21"

لكن ما حاجتي لمعرفة معرّف id لهذا الإدخال الجديد ؟

تخيلوا أن للشركة صفحة لإضافة بيانات العمّال الجدد إلى جدول employees . يقوم المسؤول "زيد" بملأ استمارة تخص العضو "فارس" ، ثم يرسلها لإدخال بيانات هذا الأخير في الجدول . و مباشرة ، يحتاج زيد للذهاب "عبرة وصلة أو رابط " إلى صفحة أخرى تعرض بيانات العامل الجديد للتأكد منها . لهذا سيحتاج إلى معرّف id "فارس" :

echo '<a href="employee.php?id='.$last_id.'">مشاهدة بيانات العامل الجديد</a>';

سيقول البعض أنه يمكننا فعل ذلك دون اللّجوء إلى استعمال $db->lastInsertId() . هذه الشيفرة مثلا تؤكّد كلام هؤلاء :

SELECT id FROM employees ORDER BY id DESC LIMIT 0, 1

باستعمال هذه الشيفرة ، سنحصل على معرّف id لآخر إدخال . لن أبخل عليكم بمثال ، حتى تشهدوا بأنفسكم على الجهد الإضافي الذي سنبذله باستعمال هذه الطريقة :

<?php
// ...
$query= $db->prepare('SELECT id FROM employees ORDER BY id DESC LIMIT 0, 1');
$query->execute();
$last_id = $query->fetch();
$query->CloseCursor();

echo 'id = '.$last_id['id'].'<br>';
echo '<a href="employee.php?id='.$last_id['id'].'">مشاهدة بيانات العامل الجديد</a>';
?>

هذه الطريقة قد تكون ذا فائدة في مكان آخر . لكن عندما نُنفّذ استعلام "INSERT" . و مباشرة بعد ذلك نريد الحصول على قيمة المعرّف id للإدخال الجديد ، تذكروا دائما استعمال lastInsertId()



لستم محتاجين لحماية بياناتكم باستعمال htmlspecialchars() و (int) أثناء إدخالها في الجدول . لكن أثناء عرضها عن طريق echo أو print يبقى استعمالها مسألة حيوية ، و ضرورية