Один клас для нескольких MySQL запросов (дайте совет начинающему ООП-програмисту))

goshaua

Новичок
Один клас для нескольких MySQL запросов (дайте совет начинающему ООП-програмисту))

Всем привет!
Начал изучать ООП. Во время написания и использования своего первого класса для базы данних возник вопрос на который в книжках я пример не нашел. Как использовать или усовершенствовать данный класс для запроса до нескольких таблиц? Я сделал так, но сомневаюсь в правильности такого способа, к тому же это не совсем удобно. Пожалуйста, подскажите правильный вариант. Благодарю!

PHP:
class MySQL {

  function __construct(){
	$this->db = mysql_connect("localhost","user","12345") or die (mysql_error(). " Error no:".mysql_errno());
	if (!mysql_select_db("test_db",$this->db)) exit("Помилка підключення до база даних.");
  }

  function __destruct(){
	mysql_close($this->db);
  }

  function Select($table, $fields='*', $where='', $limit='') {
  if($where != '') $where = " WHERE ".$where;
  if($limit != '') $limit = " LIMIT ".$limit;
  $this->result = mysql_query("SELECT $fields FROM $table $where $limit", $this->db) or die(exit("Помилка запиту до бази данних!"));
  return $this->result;
  }

}


$M = new MySQL();
$res_o = $M->Select("objects_table","country");

while($row_o = $M->ResultRow($res_o)){
$res_c = $M->Select("countries_table","country_name","id = $row_o");
$row_c = $M->ResultRow($res_c);
echo $row_c[0]."<br>";
}
 

sverel

Новичок
Что бы сделать из него класс для нескольких таблиц, просто переименуй аргумент $table в аргумент $from:

PHP:
function Select($from, $fields='*', $where='', $limit='') { 
..........
}
ну и
PHP:
$news = $M->Select(
      "`news` as `r1`,  `users` as `r2`', // $from
      "`r1`.*, `r2`.*',
      "r2.id = r1.user_id"
       );
 

Духовность™

Продвинутый новичок
goshaua
Select($table, $fields='*', $where='', $limit='')
- это делать категорически не нужно. SQL придумали не дураки, SQL придуман для облегчения написания запросов. Ты же усложняешь SQL конструкциями, от которых сам же в дальнейшем будешь путаться. Как ты сделаешь с помощью этого метода выборку с несколькими JOIN-ами? С UNION? и т.д...


используй исключения. никаких die

смотри, вот у меня так мой класс работает (попробуй реализовать подобный интерфейс):

PHP:
$db = Database::getInstance(); // сингелтон 
$res = $db->query('select NOW()');
echo $res->getOne(); 

$res = $db->query('SELECT id, lastname FROM table WHERE name = "?"', 'петя'); // строка петя эскейпится....

while ($row = $res->fetch_assoc())
{
  echo "$row[id] : $row[lastname]<br />";
}

$db->query('DELETE * FROM table WHERE id = ?', 55);
 

nirex

Новичок
Re: Один клас для нескольких MySQL запросов (дайте совет начинающему ООП-програмисту))

Когда -то я тоже задавался таким вопросом, можешь глянуть http://ifolder.ru/10962006 правда слизано немного, но общая тема понятна, если что-то не работает сорри либа так из альфы не вышла, времени на нее так и не нашлось.
 

LONGMAN

Dark Side of the Moon..
Я пользуюсь этим классом http://www.naumovs.de/class.mysql/class.mysql.html
 
Сверху