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 باشد تعداد رکورد های متاثر را بر می گرداند.
مطالبت مرتبط