دورة mysql للمبتدئين الدرس الخامس


فهاد الدرس الخامس من دورة Mysql للمبتدئين غادي نكملو الدورة ديالنا من بعد ماشفنا كيفاش نتكونيكطاو ونزيدو المعلومات فقاعدة البيانات باستعمال MYSQLI دبا غادي نشوفو كيفاش نتكونيكطاو ونزيدو المعلومات ب PDO.
PDO كتعني PHP DATA OBJECT ولي كتمكنا من اننا نتعاملو مع قواعد البيانات بطريقة سلسلة منظمة وأكثر أمانا.


1- الإتصال ب PDO

باش نتكونيكطا مع قاعدة البيانات لي كنا زدنا ب PDO  زدنا 4 ديال les variables :

- host$ لي فيها localhost ديالنا.
- user$ لي هو username لي عطيناه root لي هو لي كيمكن باش نتكونيكطا ل mysql par défaut.
- password$ لي هي كلمة المرور كتكون خاوية par défaut.
- db$ لي هي قاعدة البيانات ديالنا. 

منبعد خدمت ب try و catch لي المهمة ديالهم كيمكنو ل app ديالنا متهرسش يلا متمش الإتصال مع قاعدة البيانات بنجاح.
داخل try كن créer l'objet من la classe PDO كنعطيها ل host$ و قاعدة البيانات ول user$ وكلمة المرور منبعد كنحدد النوع ديال الأخطاء لي بغيت يتعرضوا كنختار Exception منبعد كنعرض رسالة نجاح  يلا كانت ل connexion ناجحة مكنتش ف catch كنعرض رسالة فشل مع نوع الخطأ.
الكود لي زدنا هو :

                                //index.php

<?php
//connect to database using PDO
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'php_course';
    try{
        $con = new PDO("mysql:host=$host;dbname=$db",$user,$password);
        $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        echo 'connexion réussie';
    }catch(PDOException $e){
        echo 'erreur de connexion'.$e->getMessage();
    }
?>
                            

2- غلق الإتصال مع MYSQL

فدبا درنا la connexion مع mysql خصنا نسدوها هي كتسد اتوماتيكيا ملي كيتسالا الكود.
فالمثال لي عندنا سدينا la connexion من بعد معطينا ل variable $con القيمة null.
الكود لي زدنا هو :

                                //index.php

<?php
//connect to database using PDO
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'php_course';
    try{
        $con = new PDO("mysql:host=$host;dbname=$db",$user,$password);
        $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        echo 'connexion réussie';
    }catch(PDOException $e){
        echo 'erreur de connexion'.$e->getMessage();
    }

    //close connection
    $con = null;
?>
                            

3- إضافة مستخدم لقاعدة البيانات

فباش نزيد مستخدم فقاعدة البيانات عندي requête INSERT لي كتمكن باش نزيدو des données ف la base de données ديالنا.
كندير requête كنقول INSERT INTO users يعني كنزيد ف table users كنعطي الحقول هنا حددت nom,prenom,email ل id كيتزاد اتوماتيكيا وكنعطي القيم لي بغيت ف VALUES.
منبعد كنفذ requête بل fonction exec وكنعرض رسالة نجاح يلا تزاد المستخدم متزادش ف catch كنعرض ل erreur.
الكود لي زدنا هو :

                                //index.php

<?php
//connect to database using PDO
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'php_course';
    try{
        $con = new PDO("mysql:host=$host;dbname=$db",$user,$password);
        $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $sql = "INSERT INTO users(nom,prenom,email) VALUES('alami','karim','alami@email')";
        $con->exec($sql);
        echo 'utilisateur ajouté';
    }catch(PDOException $e){
        echo 'erreur '.$e->getMessage();
    }

    //close connection
    $con = null;
?>
                            

4- إضافة أكثر من مستخدم لقاعدة البيانات

شفنا كيفاش زدنا مستخدم للجدول users دبا غادي نشوفوا كيفاش نزيدوا أكثر من واحد فنفس الوقت.
كنخدم بل fonction beginTransaction لي كتعني بلي غادي نبدا عملية الإضافة.
منبعد كنخدم بل fonction exec لي كتمكن من تنفيذ les requêtes ديالي منبعد كن valider بل fonction commit و
 كن afficher رسالة نجاح مدازتش كن afficher رسالة خطأ ف catch وكنخدم بل fonction rollback لي كتعني إلغاء الإضافة.
الكود لي زدنا هو :

                                    //index.php

<?php
//connect to database using PDO
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'php_course';
    try{
        $con = new PDO("mysql:host=$host;dbname=$db",$user,$password);
        $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        // $sql = "INSERT INTO users(nom,prenom,email) VALUES('alami','karim','alami@email')";
        $con->beginTransaction();
        $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','karim','alami@email')");
        $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','samir','samir@email')");
        $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','hamid','hamid@email')");
        $con->commit();
        echo 'utilisateurs ajoutés';
    }catch(PDOException $e){
        $conn->rollback();
        echo 'erreur '.$e->getMessage();
    }

    //close connection
    $con = null;
?>
                                

5- حماية LES REQUÊTES من الإختراق

باش نحمي les requêtes ديالي من الإختراق كنخدم ب prepare فهاد ل fonction كتاخد requête  وكتوجدها مكتنفذهاش حيت كنعطيها القيم على هاد الشكل email: من بعد كنخدم ب fonction bindParam لي كتمكن من إضافة القيم للحقول عاد كتنفذ requête باستعمال execute.
tفالمثال لي عندي وجدت requête ب prepare  منبعد زدت القيم للحقول ب bindParam  فهاد الطريقة كتحميني من sql injection لي كتمكن المخترق من أنه يرسل القيم لي بغى لقاعدة البيانات ديالنا منبعد نفذتها باستعمال execute.
الكود لي زدنا هو :

                                    //index.php

<?php
//connect to database using PDO
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $db = 'php_course';
    try{
        $con = new PDO("mysql:host=$host;dbname=$db",$user,$password);
        $con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        // $sql = "INSERT INTO users(nom,prenom,email) VALUES('alami','karim','alami@email')";
        // $con->beginTransaction();
        // $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','karim','alami@email')");
        // $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','samir','samir@email')");
        // $con->exec("INSERT INTO users(nom,prenom,email) VALUES('alami','hamid','hamid@email')");
        // $con->commit();
        // echo 'utilisateurs ajoutés';
        $query = $con->prepare("INSERT INTO users(nom,prenom,email) VALUES(:nom,:prenom,:email)");
        $query->bindParam(':nom',$nom);
        $query->bindParam(':prenom',$prenom);
        $query->bindParam(':email',$email);
        $nom = "Ahmadi";
        $prenom = "Amal";
        $email = "amal@email.com";
        $query->execute();
        echo 'utilisateur ajouté';
    }catch(PDOException $e){
        //$conn->rollback();
        echo 'erreur '.$e->getMessage();
    }

    //close connection
    $con = null;
?>