Привет, решил попробовать себя немного в php, и начал с класса для работы с бд! Честно скажу идею увидел в doctrine, но doctrine что то уж больно тяжёлая. Выношу на суд, не пинайте сильно только, я не программист как таковой, я проектировщик интерфейсов P.S.: Буду очень признателен если кто нибудь подскажет как сделать систему оповещения об ошибках Класс предназначен только для работы с MySql естественно, да может и таким новичкам как я будет попроще разобраться с этим вопросом на оснавании этого кода. Да ещё, если я что то сделал критически кретински прошу указать PHP: <? class _db{ // Метод connect в параметре передаём настройки от базы // Пример запроса // _db::connect(array('host'=>'localhost','user'=>'root','pass'=>'gashish','name'=>'minicms_jeka'); public function connect($data){ mysql_connect($data['host'],$data['user'],$data['pass']); mysql_select_db($data['name']); mysql_query('SET NAMES utf8'); } // Метод close // Пример запроса // _db::close(); :D public function close(){ mysql_close(); } // Метод SelectArray, в первом параметре указывается запрос с маской для переменных % // Дальше следуют значения переменных в том порядке в каком указаны маски // Ответом является двумерный массив // Пример запроса // $test = _db::SelectArray('SELECT % FROM %', '*', 'tbl_name'); public function SelectArray(){ $data = func_get_args(); $query = $data[0]; unset ($data[0]); $data = array_values($data); foreach($data as $k_1=>$v_1){ $p_1 = stripos($query, '%'); $query = substr_replace($query, $v_1, $p_1, 1); } $q_1 = mysql_query($query); $i_1 = 0; while($r_1 = mysql_fetch_assoc($q_1)){ foreach( $r_1 as $k_2=>$v_2 ){ $return[$i_1][$k_2]=$v_2; } $i_1++; } mysql_free_result($q_1); return $return; } // Метод SelectRow, в первом параметре указывается запрос с маской для переменных % // Дальше следуют значения переменных в том порядке в каком указаны маски // Ответом является одномерный массив // Пример запроса // $test = _db::SelectRow('SELECT % FROM % WHERE id=%', '*', 'tbl_name', 6); public function SelectRow(){ $data = func_get_args(); $query = $data[0]; unset ($data[0]); $data = array_values($data); foreach($data as $k_1=>$v_1){ $p_1 = stripos($query, '%'); $query = substr_replace($query, $v_1, $p_1, 1); } $q_1 = mysql_query($query); $r_1 = mysql_fetch_assoc($q_1); foreach( $r_1 as $k_1=>$v_1 ){ $return[$k_1]=$v_1; } mysql_free_result($q_1); return $return; } // Метод Insert, в первом параметре указывается имя таблицы // Дальше следует массив со вставляемой информацией Ключ - Имя столбца Значение - Значение // Пример запроса // _db::Insert('tbl_name', array('parent'=>'1','level'=>'1','sorted'=>'6','index'=>'9','uri'=>'map','title'=>'Карта сайта')); public function Insert($table, $data){ foreach($data as $k_1=>$v_1){ $into .= '`'.$k_1.'`,'; } foreach($data as $k_1=>$v_1){ $values .='"'.$v_1.'",'; } $into = substr($into, 0, strlen($into)-1); $values = substr($values, 0, strlen($values)-1); $query = 'INSERT INTO '.$table.' ('.$into.') VALUES ('.$values.')'; mysql_query($query); } // Метод Delete, в первом параметре указывается запрос с маской для переменных % // Дальше следуют значения переменных в том порядке в каком указаны маски // Пример запроса // _db::Delete('DELETE FROM % WHERE id=%', 'tbl_name', 19); public function Delete(){ $data = func_get_args(); $query = $data[0]; unset ($data[0]); $data = array_values($data); foreach($data as $k_1=>$v_1){ $p_1 = stripos($query, '%'); $query = substr_replace($query, $v_1, $p_1, 1); } mysql_query($query); } // Метод Update, в первом параметре указывается запрос с маской для переменных % // Дальше следуют значения переменных в том порядке в каком указаны маски // Пример запроса // _db::Update('UPDATE % SET % WHERE id=%', 'tbl_name',array('id'=>'1','uri'=>'map','title'=>'Карта сайта'), 6); public function Update(){ $data = func_get_args(); $query = $data[0]; unset ($data[0]); $data = array_values($data); foreach($data as $k_1=>$v_1){ if(is_array($v_1)){ foreach($v_1 as $k_2=>$v_2){ $temp .= $k_2.'="'.$v_2.'",'; } $temp = substr($temp, 0, strlen($temp)-1); $p_1 = stripos($query, '%'); $query = substr_replace($query, $temp, $p_1, 1); }else{ $p_1 = stripos($query, '%'); $query = substr_replace($query, $v_1, $p_1, 1); } } mysql_query($query); } } ?>
PHP: foreach( $r_1 as $k_2=>$v_2 ){ $return[$i_1][$k_2]=$v_2; } а так же php умеет присваивать целые массивы
MySQLi конечно удобен Но я это, попратиковаться просто решил, не то что бы я типа вот гениальную весчь изобрёл Так обучаюсь чисто
Кодировку менять в коде? старые функции В контексте реализации - совершенно ненужный метод (ссылка на соединение не хранится, закроется последнее соединение). ну и та же фигня - ресурс соединения в классе не хранится. Использоваться будет последнее созданое, и не факт что это будет соединение, созданое этим классом. интересная реализация =) такому классу положени эскейпить данные самостоятельно (как это mysqli делает для подготовленных запросов). Объектный интерйес mysqli заменяет это класс на 100500%
[vs] про MySqlli ты точно сказал Я на момент написания про него не знал Я ж не программист типа Это так самотренировка! Кстати я его (класс) по всем советам данным здесь уже подисправил, кол-кода сократилось достаточно Я лошара и не знал к примеру о существовани implode() и подобных вещей которые здорово сократили набор этой писаниы Сейчас читаю мануал от корки до корки как говорится!