ارتباط با دیتابیس از طریق کتابخانه pdo در php

اتصال به دیتابیس با pdo

pdo یک کتابخانه ارتباط با دیتابیس در php هست که از روش قدیمی mysqli_connect خیلی بهتر است مثلا حملات sql injection در روش قدیمی باید کنترل شود ولی در pdo به راحتی جلوی حملات گرفته شده است.

اسکریپت زیر کلاس ارتباط با دیتابیس از طریق pdo هست

<?php

use PDO as PDO;
use PDOException as PDOException;

class Database
{
    var $databaseHost;
    var $databaseName;
    var $databaseUsername;
    var $databasePassword;
    var $connection;
    function __construct()
    {
        try {
            $this->databaseHost = 'localhost';
            $this->databaseUsername = 'root';
            $this->databasePassword = '';
            $this->databaseName = 'mbmti';

            $this->connection = new PDO("mysql:host=" . $this->databaseHost . ";dbname=" . $this->databaseName, $this->databaseUsername, $this->databasePassword, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",   PDO::ATTR_PERSISTENT    => true));

            $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $this->connection->exec("SET NAMES 'utf8'");
            $this->connection->exec("SET CHARACTER SET utf8");
        } catch (PDOException $ex) {
            echo '<div class="error-database-ex" style="color:red";>'.$ex->getMessage().'</div>';
        }
    }
    function select($query, $param = array())
    {
        try {

            if (isset($this->connection)) {
                $prepared = $this->connection->prepare($query);
                $prepared->execute($param);
                $data = $prepared->fetchAll();
                $res = array();
                $index_row = 0;
                foreach ($data as $row) {
                    $row_data = array();
                    foreach ($row as $key => $col) {
                        if (!is_numeric($key)) {
                            $row_data[$key] = $col;
                        }
                    }
                    $res[$index_row] = $row_data;
                    $index_row = $index_row + 1;
                }
                return $res;
            } else {
                return array();
            }
        } catch (PDOException $ex) {          
            echo '<div class="error-database-ex" style="color:red";>'.$ex->getMessage().'</div>';
        }
    }

    function command($query, $param = array())
    {
        try {
            if (isset($this->connection)) {
                $prepared = $this->connection->prepare($query);

                $data = $prepared->execute($param);
                if ($this->connection->lastInsertId() > 0) {
                    $data = $this->connection->lastInsertId();
                } else {
                    $data = $prepared->rowCount();
                }

                return $data;
            } else {
                return "0";
            }
        } catch (PDOException $ex) {
            echo '<div class="error-database-ex" style="color:red";>'.$ex->getMessage().'</div>';
        }
    }
}

کلاس دیتابیس شامل سه تابع construct و select و command می باشد

تابع construct

سازنده کلاس هست که با کتابخانه pdo ، کلاس را به دیتابیس متصل می کند

در تابع سازنده پارامتر های ارتباط با دیتابیس موردنظر ست می گردد و با استفاده از کلاس pdo به دیتابیس متصل می گردد اگر خطایی در ارتباط با دیتابیس باشد در exeption با استفاده از تابع getMessage خطا را بر می گرداند.

تابع select

تابع select برای واکشی اطلاعات از دیتابیس هست و دوتا پارامتر دارد

پارامتر query : کوئری خودتان را در این پارامتر قرار دهید

پارامتر param : پارامتر های کوئری را بصورت آرایه در این پارامتر قرار دهید

مثال :

$database=new Database;
$query="SELECT * FROM tb_option where option_id=:id";
$param=array(":id"=>1);
$options=$database->select($query,$param);

یک نمونه از کلاس Database ایجاد کردیم و در خط دوم کوئری را با پارامتر id: فیلتر کردیم و در خط سوم پارامتر id: را مقدار دهی کردیم و در خط چهارم تابع select را صدا زدیم خروجی بصورت آرایه در متغییر options$ قرار می گیرید.

تابع command

برای عملیات insert ، update ، delete هست

که دوتا پارامتر دارد

پارامتر query : کوئری خودتان را در این پارامتر قرار دهید

پارامتر param : پارامتر های کوئری را بصورت آرایه در این پارامتر قرار دهید

$database=new Database;
$query="insert into tb_option(option_key,option_value) values(:option_key,:option_value)";
$param=array(":option_key"=>"کلید",":option_value"=>"مقدار");
$id=$database->command($query,$param);

یک نمونه از کلاس Database ایجاد کردیم و در خط دوم کوئری را با پارامترها نوشتیم و در خط سوم پارامتر ها را مقدار دهی کردیم و در خط چهارم تابع command را صدا زدیم خروجی بصورت عدد هست اگر دستور شما insert باشد آی دی رکورد ذخیره شده را بر می گرداند و اگر update و یا delete باشد تعداد رکورد های متاثر را بر می گرداند.

مطالبت مرتبط

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *