يه دست پخت ديگه از خودم .
خيلي ها شايد از روش سنتي براي اتصال به ديتابيس و کوئري استفاده ميکنن.
و شايد خيلي هاتون از mysqli هيچ وقت استفاده نکردين! جالبه بدونين mysqli سرعت قابل توجهي در مقابل mysql داره . (توي پرانتز mysqli هم براي ارتباط با ديتابيس MySql استفاده ميشه!)
خب من دو تا کلاس استايک mysql , mysqli براي ارتباط با ديتابيس نوشتم .
از هر کدوم که خواستين استفاده کنين هر وقتي هم دوست داشتين ميتونين بينشون سويچ کنين
کلاسها رو ميذارم . اول بايد يکي از کلاسهاي زير رو توي برنامهتون include کنين
کلاس mysql
کد PHP:
class db { static private function _construct(){ @mysql_connect(dbhost,dbuser,dbpass) or die('<h1>error in connect db'); @mysql_select_db(dbname) or die('<h1>error in select db'); } static public function set_utf8(){ self::_construct(); mysql_query("SET NAMES 'utf8'"); } static public function escape($x){ if(function_existes(mysql_real_escape_string)) return mysql_real_escape_string($x); else return $x; } static public function q($x){ self::set_utf8(); return @mysql_query($x); } static public function get($x){ $result = self::q($x); $out = array(); $i = 0; while($row = mysql_fetch_object($result)){ $i++; $out[$i] = $row; } return $out; } static public function q_af($x){ self::q($x); return mysql_affected_rows(); } static public function close(){ @mysql_close(self::_construct()); return 1; } static private function _destruct(){ return; }}
کلاس mysqli
کد PHP:
class db { static private $mysqli = null; static private function _construct(){ @self::$mysqli = new mysqli(dbhost,dbuser,dbpass,dbname) ; if(self::$mysqli->connect_error) die('<h1>error in connect db'); } static public function set_utf8(){ self::_construct(); @self::$mysqli->query("SET NAMES 'utf8'"); } static public function escape($x){ if(function_existes(mysqli_real_escape_string)) return mysqli_real_escape_string($x); else return $x; } static public function q($x){ self::set_utf8(); return @self::$mysqli->query($x); } static public function get($x){ $result = self::q($x); $out = array(); $i = 0; while($row = @$result->fetch_object()){ $i++; $out[$i] = $row; } return $out; } / static public function q_af($x){ self::q($x); return self::$mysqli->affected_rows; } static public function close(){ self::$mysqli->close(); return 1; } static private function _destruct(){ return; }}
روش استفاده ابتدا يکي از کلاسهاي زير رو توي يه فايلي بذاريد و توي مثلاً فايل config.php پروژهتون include کنين.
سپس بايد 4 تا ثابت تعريف کنين مثل مثال زير
کد PHP:
define('dbname','reza19');
define('dbuser','root');
define('dbpass','');
define('dbhost','127.0.0.1');
حالا هرجا خواستين به ديتابيس کوئري بدين از متد زير استفاده کنين
کد PHP:
db::q("INSERT INTO `cat` VALUES (NULL, 'uri', 'توضيحات', 'نام')")
براي راحتيه شما يه get هم اضافه کردم که هروقت select داشتين از اين استفاده کنين بهتره (چون خودش fetch ميکنه)
کد PHP:
$get = db::get('select * from comment limit 10');
print_r($get);
foreach($get as $row)
echo $row->id.'----'.$row->name.'<br>';
، البته واکشي رو بصورت object ميده بيرون
بعضي وقتهام که ميخوايد يه insert يا update انجام بديد يه affected row ميخوايد که مثلاً تعداد سطرهاي تغيير کرده رو نشون ميده
که بايد چک کنين اگه بزرگتر از 0 بود تغييرات انجام شده در غير انصورت تغييرات انجام نشده براي اينکار از متد زير استفاده کنيد
کد PHP:
$result= db::q_af("INSERT INTO `cat` VALUES (NULL, 'uri', 'توضيحات', 'نام')");if($result>0) echo 'تغغيرات ثبت شد'; else echo 'تغييرات ثبت نشد';
* توي کلاسها چارست پيشفرض روي utf8 هست .
* نکته پاياني اينکه کلاسهاي استاتيک نياز به نمونه گيري ندارن
با تشکر رضا شيخله