PDA

View Full Version : سوال: کلاس برای بانک اطلاعاتی



sedamorde
پنج شنبه 29 بهمن 1388, 01:02 صبح
سلام, من برای اولین بار یک کلاس برای پرسش از بانک ساختم!!
اگر میشه یک نگاهی بکنید و اشکالاتم را بگید. مرسی



<?php

class MySQL
{
private $conn;

function open()
{
$conn = @mysql_connect(HOST, USER, PASS) or die('Error');
$select = @mysql_select_db(NAME ,$conn);
if(!$select) { @die('Error'); }
}

function select($query)
{
$my_query = mysql_query($query);
if(!$my_query) { @die('Error'); }
$back = mysql_fetch_assoc($my_query);
return $back;
}

function close()
{
mysql_close($this->conn);
}
}
?>


<?php

$db= new MySQL;
$db->open();
$result = $db->select("SELECT * FROM table WHERE id='$id' LIMIT 1");

echo $result['title'];

$db->close();
?>
فقط نمیدونم جرا وقتی mysql ا میبندم خطا میده!!؟


Warning: mysql_close() expects parameter 1 to be resource, null given in /home/code/html/class.php on line 24
مرسی از همه دوستانی که کمکم میکنند :)

Mah
پنج شنبه 29 بهمن 1388, 11:17 صبح
سلام . دوست عزيز .
كلاس شما سازنده ندارد .
چرا هيچ متدي مقادير Host - User - Pass - Name - db را ست نمي كنه .

بايد بيشتر كار كني .
ولي در كل كار خوبي را شروع كردي .

موفق باشيد .

sedamorde
پنج شنبه 29 بهمن 1388, 12:27 عصر
مرسی دوست من :)
میشه در مورد سازه کمی راهنمایی کنی؟
قسمتی از کد را فکر کدم لازم نیست اینجا بگذارم :


define('NAME','test');
define('USER','root');
define('PASS','987654');
define('HOST','localhost');
include 'class.php';


کلاس داره درست کار میکنه و من به نتیجه ای که میخواستم رسیدم (به جز همون خطا بسته شدن بانک) اما نمیدونم بهبود این کد باید چطوری باشه و اصلا هم به امنیت کلاس وارد نیستم!
مرسی

ahmadflasher
پنج شنبه 29 بهمن 1388, 13:28 عصر
تابع سازنده ، تابعي هست همنام با خود کلاس و مثل بقيه تابع ها نوشته ميشه و تنها فرقش اينه که وقتي يه شيئ از کلاس ميسازي ، سارنده به طور خودکار اجرا ميشه.
مثلاً شما میتونی تو کلاس خودت اسم تابع open رو MySQL بذاری تا هنگام ساختن شئی به صورت خودکار به دیتا بیس وصل بشه.
البته میتونی اسم تابع رو به function __construct هم تغییر بده تا به عنوان سازنده شناسایی شه.




<?php

class MySQL
{
private $conn;

function MySQL()
{
$conn = @mysql_connect(HOST, USER, PASS) or die('Error');
$select = @mysql_select_db(NAME ,$conn);
if(!$select) { @die('Error'); }
}

function select($query)
{
$my_query = mysql_query($query);
if(!$my_query) { @die('Error'); }
$back = mysql_fetch_assoc($my_query);
return $back;
}

و در ادامه


<?php

$db= new MySQL();
$result = $db->select("SELECT * FROM table WHERE id='$id' LIMIT 1");

echo $result['title'];

$db->close();
?>

sedamorde
پنج شنبه 29 بهمن 1388, 15:12 عصر
اول مرسی از همه شما دوستان, کم پیش اومده بود تو این انجمن انقدر جواب مفید و ساده داده بشه.

من کلاس را با راهنمایی های شما اینطوری کردم :


<?php
class MySQL
{
private $conn;

function MySQL()
{
$this->conn = @mysql_connect(HOST, USER, PASS) or die('Error');
$select = @mysql_select_db(DB_NAME ,$this->conn);
if(!$select ) { @die('Error'); }
}

function select($query)
{
$my_query = mysql_query($query);
if(!$my_query) { @die('Error'); }
$back = mysql_fetch_assoc($my_query);
return $back;
}

function close()
{
mysql_close($this->conn);
}
}
?>




$db= new MySQL;
$result= $db->select("SELECT * FROM table WHERE id='$id' LIMIT 1");
$db->close();

echo $result['title'];


فقط tarhebartar جان میشه در مورد متغیرها و جای استفاده this$ کمی بیشتر توضیح بدی!؟
مرسی :)

امیـرحسین
پنج شنبه 29 بهمن 1388, 21:08 عصر
اگر اجازه بدید من هم نظرم رو بگم.
طوری connect رو انجام بدید که نیاز به constant نباشه. اینجوری کلاس شما ایزوله تر خواهد بود و می تونید خیلی راحت با اون کلاس همزمان به چند تا دیتابیس متصل شید.
یه متد برای connect ایجاد کنید که اگر user و pass و غیره نداشت، از constantها استفاده کنه.
بیخود اسمش رو شی نذاشتند. باید مثل شی عمل کنه و به جایی وابسته نباشه.

sedamorde
جمعه 30 بهمن 1388, 00:21 صبح
امیـرحسین جان مرسی که نظر دادی و راهنمایی کردی :)
اتفاقا یکی از مشکلات من اینکه میخوام به جندتا دیتابیس connect بشم (قبلا در تاپیک دیگه ای مطرح کردم اما نتیجه نداشت!) اگر امکانش هست یک مثال هم بزن, مرسی.

امیـرحسین
جمعه 30 بهمن 1388, 18:33 عصر
اینو ببینید. با کد شما اختلاف زیادی نداره ولی یکم انعطافپذیر تره:
class MySQL
{
private $conn;

function __construct($host='', $user='', $pass='', $db_name='')
{
$this->connect($host, $user, $pass, $db_name);
}

function MySQL($host='', $user='', $pass='', $db_name='')
{
$this->__construct($host, $user, $pass, $db_name);
}

function connect($host='', $user='', $pass='', $db_name='')
{
$host = $host ? $host : HOST;
$user = $user ? $user : USER;
$pass = $pass ? $pass : PASS;
$db_name = $db_name ? $db_name : DB_NAME;

$this->conn = @mysql_connect($host, $user, $pass) or die('Error');
$select = @mysql_select_db($db_name ,$this->conn);
if(!$select ) { @die('Error'); }
}

function select($query)
{
$my_query = mysql_query($query);
if(!$my_query) { @die('Error'); }
$back = mysql_fetch_assoc($my_query);
return $back;
}

function close()
{
mysql_close($this->conn);
}
}

این اتصال همزمان به سه دیتابیس:
$conn = new MySQL();
$conn1 = new MySQL('localhost', 'user1', 'pass1', 'db1');
$conn2 = new MySQL('localhost', 'user2', 'pass2', 'db2');