PDA

View Full Version : سوال: تبدیل به pdo



DR.HTML
یک شنبه 09 شهریور 1393, 19:42 عصر
سلام من یه کلاس برای ارتباط با دیتابیسم نوشته بودم که از روش سنتی musql استفاده میکرد حالا دارم تغییرش میدم به pdo حالا به یه سوال دارم اونم اینه که ایا برای همین pdo از اول بشینم کلاس بنویسم ؟ ! یا نه خودش مگه شئ گرا نیست از اول ننویسم از خودش مستقیم استفاده کنم . چون بعضی جاهاش واقعا به مشکل بر میخورم این کلاس قبلی من بوده
<?php
require_once 'defaults.php';
class db {
private $connection;
public function __construct() {
$this->connection = mysql_connect ( HOST, USER, PASS );
mysql_select_db ( DB, $this->connection );
mysql_query ( 'set names \'utf8\'' );
mysql_set_charset ( 'utf-8' );
}
public function SendQuery($value) {
if ($this->connection) {
return mysql_query ( $value, $this->connection );
}
return false;
}
public function FetchQuery($value) {
$myresults = array ();
if ($this->connection) {
$results = $this->SendQuery ( $value );
if (mysql_num_rows ( $results ) > 0) {
while ( $result = mysql_fetch_assoc ( $results ) ) {
$myresults [] = $result;
}
}
return $myresults;
}
}
public function Affected(){
$result=mysql_affected_rows($this->connection);
return $result;
}
public function secure($value) {
return mysql_real_escape_string ( $value );
}
}

arash691
یک شنبه 09 شهریور 1393, 21:39 عصر
خوده PDO هم شئ گرا پیاده سازی شده پس زیاد فرقی نمیکنه ... این کلاس DB رو هم اگه با PDO دوباره بازنویسی بکنی فقط به خوانایی برنامت طبق قوانینی که خودت وضع کردی بیشتر کمک میکنه

hamedarian2009
یک شنبه 09 شهریور 1393, 21:57 عصر
شما یه کلاس طراحی کن که از کلاس PDO اصلی ارث ببره و در این صورت میتونید از متدهای PDO و هم متدهای خودتون باهم استفاده کنید

DR.HTML
یک شنبه 09 شهریور 1393, 23:03 عصر
خوب یه سوال مثلا من این متدو بخوام با prepare پیاده کنم
public function SendQuery($value)

چه چیزیو باید retun کنم ؟ execute رو ؟

arash691
یک شنبه 09 شهریور 1393, 23:16 عصر
اول کوئری رو بساز بعد میتونی execute رو return بکنی ...

DR.HTML
دوشنبه 10 شهریور 1393, 00:07 صبح
یه سوال دیگه اونجاهایی که میخوام پارامتر بدم چی ؟


مثلا select * from mytable where `id`=id

خوب ما اگر اینو توی متد بزاریم کار میکنه اما ایزوله نمیکنه چون ما اونار با bind قرار ندادیم راه حلش چیه ممنون میشم دوستا ن جواب بدن

rezaonline.net
دوشنبه 10 شهریور 1393, 08:32 صبح
بفرمایید اینم یه کلاسی که خودم نوشتم واسه pdo استفاده کنید

/*
* Simple MYSQL_PDO class
*
* @author : reza <info@rezaonline.net>
*
* usage :

$db = new RxDB('mysql:dbname=mydatabase;host=localhost', 'db_username', 'db_password');
//insert
$af = $db->insert('tbl',array(
'name'=>'reza',
'age'=>30
));

if($af>0)
echo true;


//update
$id = 1;
$af = $db->update('tbl',array(
'name'=>'reza',
'age'=>30
),'id=?' ,array($id));


//delete
$af = $db->delete('tbl','id=?',array($id));


//query

$row = $db->query("select * from user where id=? and title=?",array($id,$title))->row();

$all = $db->query("select * from user")->all();


//update , delete
$db->query("update users set username=? where id=?")->execute(array($username,$id));


//read
$all = $db->get("users","`id` < ? limit 10",array($id))->all();

$all = $db->get(array('id,username,password',"users"),"`id` < ? limit 10",array($id))->all();
**/


class RxDb
{
private $sql = NULL;
private $params = array();

private $method = '';

public static $log = array();


public $pdo = NULL;

function __construct($_1,$_2,$_3)
{
$this->pdo = new PDO($_1,$_2,$_3);

$this->pdo->query("set names utf8")->execute();
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
public function query($sql,$params=array())
{
$this->sql = $sql ;
$this->params = $params;
$this->method = __FUNCTION__;

return $this;
}

function get($tbl='',$condition='',$params=array())
{
if(is_array($tbl))
{
$f = $tbl[0];
$tbl = $tbl[1];
}
else
{
$f = '*';
}
if(empty($condition))
$c = '';
else
$c = " WHERE $condition ";
$this->sql = "SELECT {$f} FROM `{$tbl}` {$c}";
$this->params = $params;
return $this;
}

function row($fetch='object')
{
$key = array(
'object'=> PDO::FETCH_OBJ ,
'array'=> PDO::FETCH_ASSOC ,
'num'=> PDO::FETCH_NUM
);


$stmt = $this->pdo->prepare($this->sql);
foreach($this->params as $key=>$val)
{
if(is_int($key))
{
$key = $key+1;
$stmt->bindValue($key, $val);
}
else
$stmt->bindParam($key, $val);
}
$stmt->execute();

$this->logQuery();
if($fetch == 'array')
return $stmt->fetch(PDO::FETCH_ASSOC);
else
return $stmt->fetch(PDO::FETCH_OBJ);

}

function all($fetch='object')
{
$key = array(
'object'=> PDO::FETCH_OBJ ,
'array'=> PDO::FETCH_ASSOC ,
'num'=> PDO::FETCH_NUM
);

$stmt = $this->pdo->prepare($this->sql);

foreach($this->params as $key=>$val)
{
if(is_int($key))
{
$key = $key+1;
$stmt->bindValue($key, $val);
}
else
$stmt->bindParam($key, $val);
}
$stmt->execute();

$this->logQuery();
if($fetch == 'array')
return $stmt->fetchAll(PDO::FETCH_ASSOC);
else
return $stmt->fetchAll(PDO::FETCH_OBJ);

}


function execute($params=array())
{
if( ! empty($params))
$this->params = $params;

if(empty($this->params))
{
$ret = $this->pdo->prepare($this->sql);

$this->logQuery();
return $ret->execute();
}
else
{
$stmt = $this->pdo->prepare($this->sql);
foreach($this->params as $key=>$val)
{
if(is_int($key))
{
$key = $key+1;
$stmt->bindValue($key, $val);
}
else
$stmt->bindParam($key, $val);
}

$ret =$stmt->execute();

$this->logQuery();
return $ret;
}
}




protected function logQuery()
{
$qr = $this->sql ;
if( ! empty($this->params))
{
$qr .=" | ";
foreach($this->params as $key=>$val)
$qr .= " {$key}=>{$val}";
}

self::$log[] = $qr;
$this->params = array();
$this->sql = '';
}



//query Builder
function insert($tbl,$data=array())
{
$key = join(',',array_keys($data));

$val = str_repeat('?,', intval(count(array_keys($data))));

$val = trim($val,',');

$qr = "INSERT INTO `{$tbl}` ($key) values($val) ";
return $this->query($qr)->execute(array_values($data));
}


function update($tbl='',$data=array(),$condition=' 1=1',$params = array())
{

$qr = "update `{$tbl}` set ";

$newData = array();
foreach($data as $key=>$vals)
{
$qr .="`{$key}`=?,";
$newData[] = $vals;
}

foreach($params as $row)
$newData[] = $row;

$qr = rtrim($qr,',');
$qr .= " WHERE {$condition} ";

return $this->query($qr)->execute(array_values($newData));
}


function delete($tbl='',$condition='',$params=array())
{
if( ! empty($condition))
$wh = " where ({$condition})";
else
$wh = '';
return $this->query("delete from `{$tbl}` {$wh}")->execute($params);
}

function __destruct()
{
unset($this->pdo);
$this->pdo = NULL;
}
}



نحوه استفاده

$db = new RxDB('mysql:dbname=mydatabase;host=localhost', 'db_username', 'db_password');
//insert
$af = $db->insert('tbl',array(
'name'=>'reza',
'age'=>30
));

if($af>0)
echo true;


//update
$id = 1;
$af = $db->update('tbl',array(
'name'=>'reza',
'age'=>30
),'id=?' ,array($id));


//delete
$af = $db->delete('tbl','id=?',array($id));


//query

$row = $db->query("select * from user where id=? and title=?",array($id,$title))->row();

$all = $db->query("select * from user")->all();


//update , delete
$db->query("update users set username=? where id=?")->execute(array($username,$id));


//read
$all = $db->get("users","`id` < ? limit 10",array($id))->all();

$all = $db->get(array('id,username,password',"users"),"`id` < ? limit 10",array($id))->all();

DR.HTML
دوشنبه 10 شهریور 1393, 08:55 صبح
با تشکر میدونستم کلاسهای اماده ای برای اینکار هست امابیشتر قصدم یادگیریه ای
:قلب: