<?php
define('DB_HOST','localhost');
define('DB_USERNAME','digipey1_app');
define('DB_PASSWORD','M&yt2%chL!Di');
define('DB_NAME','digipey1_app');


class database{
private $con; //متغیر خصوصی برای بررسی اتصال//
private $db; //متغیر خصوصی برای ایجاد شی دیتابیس//;
private $last_q=false; //متغیر خصوصی که آخرین درخواست را نگه میدارد//
private $end_des = true;
public function __construct(){ //تابع سازنده//

$this->con  = mysqli_connect(DB_HOST,DB_USERNAME,DB_PASSWORD); //ابتدا به دیتابیس وصل میشویم و اطلاعات اتصال در فایل config هست که توسط ثوابت معلوم شده//

if(!$this->con){ //اگر در بالا اتصال نباشد مقدار متغیر مذکور 0 میشود و باید خطای پایگاه داده چاپ شود//

die($this->error());

}


//پس از اتصال باید بگوییم از کدام دیتابیس استفاده میکنیم که با دستور زیر معلوم میکنیم و نتیجه را در متغیر مذکور میریزیم//
$this->db = mysqli_select_db($this->con,DB_NAME);

//اگر به هر دلیلی مثلا نبودن دیتابیسی با آن نام اروری داشتیم متغیر مذکور 0 میشود و باید خطا چاپ شود//
if(!$this->db){

die($this->error());

}
/*
mysql_query();
برای اجرای هر درخواستی مانند وارد کردن اطلاعات یا گرفتن اطلاعات یا آپدیت  استفاده میشود

*/
mysqli_query($this->con,'SET NAMES utf8');//دیتابیس را برای مقادیر فارسی ست میکند//

}


/*
این تابع برای اجرای درخواست ها ایجاد شده 
یک آرگومان به آن وارد میشود که دستور اس کیو ال هست

*/
public function q($sql){

$q= mysqli_query($this->con,$sql); //درخواست انجام میشود و مقدار آن در متغیر ریخته میشود//

if($q){ 
$this->last_q = $q; //مقدار متغی آخرین درخواست تغییر میکند//

}
if(!$this->last_q){
die($this->error());
}
return $this->last_q ; //برگشت نتیجه//

}

/*
این تابع یک درخواست را بررسی میکند و مقدار نتایج را نشان میدهد
یک آرگومان میگیرد که آن درخواست است 
همان درخواستی که در تابع قبل گفتیم 
*/
public function r($q=false){
$o = false;
if($q){
$o = mysqli_num_rows($q);
}elseif($this->last_q){
$o = mysqli_num_rows($this->last_q);

}


return $o;

}

/*
یک درخواست را میگیرد و سپس تبدیل به شی میکند تا در پی اچ پی بتوانیم استفاده کنیم

*/
public function a($q=false){
$o = false;
if($q){
$o = mysqli_fetch_array($q);
}elseif($this->last_q){
$o = mysqli_fetch_array($this->last_q);

}


return $o;

}


public function up($q=false){
$o = false;
if($q){
$o = mysqli_affected_rows($q);
}elseif($this->last_q){
$o = mysqli_affected_rows($this->last_q);

}


return $o;

}

public function error(){

return mysqli_error($this->con);

}
public function free_result($res=FALSE) {
		$res    = FALSE!==$res ? $res : $this->last_q;
		if(FALSE == $res) {
			return FALSE;
		}
		return  mysqli_free_result($res);
	}
public function fetch_field($query) {
//$query = $query ? $query : $this->last_q;
		$res	= $this->q($query);
		if(FALSE == $res) {
			return FALSE;
		}
		if( ! $row = ( mysqli_fetch_row($res) ) ) {
			return FALSE;
		}
		$this->free_result($res);
		return $row[0];
	}

public function e($s){

return mysqli_real_escape_string($this->con,$s);




}

public function insert_id(){

return mysqli_insert_id($this->con);


}

public function checkParameters($text){
    if ($this->contains($text, '=') || $this->contains($text, '!')
    || $this->contains($text, 'and ') || $this->contains($text, ' and')
    || $this->contains($text, ' or') || $this->contains($text, 'or ')
    || $this->contains($text, ' ') || $this->contains($text, '"') || $this->contains($text, "'")) { 
        return false ;
    }else {
        return true ;
    }
}


public function contains($needle, $haystack){
    return strpos($haystack, $needle) !== false;
}



/*
تابع برعکس سازنده است
ویرانگر هست و پس از پیان کار با کلاس اجرا میشود که ما درون آن دستور قطع ارتباط دیتابیس را قرار دادیم 

*/
public function __destruct(){
if($this->end_des){
mysqli_close($this->con);
$this->con = false;
}
return true;
}


}

?>