Написал простенький клас для работы с бд, что скажите? PHP: <?php class mysqli_db{ private $host = '***'; private $user = '***'; private $password = '****'; private $database = '****'; private $connection_link; private $query_result; private $query_string; private $mysqli; public $object_array = array(); //Соединение с БД public function connect(){ $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->database); if (mysqli_connect_errno()) { printf("Подключение невозможно: %s\n", mysqli_connect_error()); exit(); } } //Выполнение запроса public function query($query_string){ $this->query_string = $query_string; $this->query_result = $this->mysqli->query($query_string); } //Вывод на экран запроса public function query_print(){ echo '<font color="red">'.$this->query_string.'</font>'; } //Возвращение массива public function return_obj_array(){ $this->object_array=''; $i = 0; while( $row = $this->query_result->fetch_assoc() ){ $this->object_array[$i] = $row; $i++; } return $this->object_array; $this->query_result->->close(); } //Разрыв связи public function __destruct(){ $this->mysqli->close(); } } ?>
нету синглетона хочется $db = DB::GetInstance(); хотелось бы иметь $obj = $db->QueryObject($sql); $objs = $db->QueryObjects($sql); $id = $db->QueryInsertArray($table,$insert); $db->QueryUpdateArray($table,'id',$id,$update); нету проверок на данные вообще класс просто фантик для mysqli - толку ноль
грамотная структура классов - дорогого стоит. для начала прочти про autoload() потом сформулируй для себя что же будет автоматизировано? все-все - это будешь девочкам втирать. тут нужно знать точно.
А зачем autoload? Будет же один класс. Автоматизировать хотелось бы добавление удаление и т.д., думаю вы со своим опытом подскажите что еще лучше автоматизировать.
поверь - будет МНОГО классов =) вот чем выше уровень абстракции - тем геморойнее все оно... я юзаю такое: PHP: <?php /** * Класс для работы с MySQL DB */ class EnigmaMySQL extends EnigmaATOM { /** * соединение */ var $conn = false; /* * Как запущен? ВЕБ или консоль * */ function isCGI() { $rc = true; if (!isset($_SERVER["argv"][0]) || isset($_SERVER['REQUEST_METHOD']) || isset($_SERVER['REMOTE_ADDR'])) { $rc = false; } return $rc; } /** * Выдать сообщение об ошибке и закончить работу * * @param string $msg пользовательское сообщение */ function Error($msg='') { if($this->isCGI()) { if(!empty($msg)) print("\nMySQL error: [".iconv('UTF-8','CP1251',$msg)."]"); if($this->conn) { print("\nMySQL error: [".mysql_errno($this->conn)."] ".mysql_error($this->conn).""); /* $result = mysql_query('show full processlist',$this->conn); while( $row = mysql_fetch_row($result) ) { print_r($row); } */ } else { print("\nMySQL error: [".mysql_errno()."] ".mysql_error().""); } } else { print('<div style="border: 1px solid red; padding: 10px; background-color: white;">'); if(!empty($msg)) print("Enigma::MySQL::error [<pre>{$msg}</pre>]<br />"); if($this->conn) print("MySQL error1: [".mysql_errno($this->conn)."] ".mysql_error($this->conn).""); else print("MySQL error2: [".mysql_errno()."] ".mysql_error().""); print('</div>'); } exit(); } /** * Инициализироать класс * * @return void */ function EnigmaMySQL($host,$user,$pass,$dbdb) { $this->conn = @mysql_pconnect($host,$user,$pass) or $this->Error('Не могу подключиться к БД ['.$host.']'); @mysql_select_db($dbdb,$this->conn) or $this->Error('Не могу выбрать БД'); $this->Query('SET NAMES UTF8'); } /** * Получить уникальный экземпляр класса * * @return instance */ function GetInstance($id=0,$host='localhost',$user='enigma',$pass='enigma',$dbdb='enigma') { static $instance = array(); // закрываем if($host == 'close' AND $user == '' AND $pass == '' AND $dbdb == '') { $instance[$id]->Close(); unset($instance[$id]); return false; } if(!isset($instance[$id])) $instance[$id] = new EnigmaMySQL($host,$user,$pass,$dbdb); return $instance[$id]; } /** * завершиь работу класса * @return void */ function Close() { if($this->conn) @mysql_close($this->conn); $this->conn = false; } /** * Выполнить SQL запрос и вернуть результат * * @param string $sql SQL запрос * @return resorce ресурс запроса */ function Query($sql) { $result = mysql_query($sql,$this->conn); if($result === false) $this->Error($sql); return $result; } function Insert($sql) { $result = mysql_query($sql,$this->conn); if($result === false) $this->Error($sql); return mysql_insert_id($this->conn); } /** * Получить один объект из запроса * * @param string $sql SQL запрос * @return object Объект из запроса */ function QueryObject($sql) { $result = $this->Query($sql); if( mysql_num_rows($result) == 0 ) { return false; } if( mysql_num_rows($result) > 1 ) { $this->Error('SQL запрос вернул больше 1 записи'); } $obj = mysql_fetch_object($result); return $obj; } /** * Получить один объект из запроса * * @param string $sql SQL запрос * @return object Объект из запроса */ function QueryArray($sql) { $result = $this->Query($sql); if( mysql_num_rows($result) == 0 ) return false; if( mysql_num_rows($result) > 1 ) { $this->Error('SQL запрос вернул больше 1 записи'); } $obj = mysql_fetch_assoc($result); return $obj; } /** * Получить массив объектов из SQL запроса * * @param srting $sql SQL запрос * @return array массив объектов */ function QueryObjects($sql) { $result = $this->Query($sql); if($result) { $objs = array(); while( $obj = mysql_fetch_object($result) ) { $objs[] = $obj; } mysql_free_result($result); if( count($objs) > 0 ) return $objs; } return false; } /** * Получить массив массивов из SQL запроса * * @param srting $sql SQL запрос * @return array массив объектов */ function QueryArrays($sql) { $result = $this->Query($sql); $objs = array(); if($result) { while( $obj = mysql_fetch_assoc($result) ) { $objs[] = $obj; } } mysql_free_result($result); return $objs; } function InsertArray($table,$a=array()) { if(!empty($table)) { $t = array(); foreach($a as $k => $v) { $t[$k] = $this->Escape($v); } $keys = '`'.join('`,`',array_keys($t)).'`'; $vals = "'".join("','",array_values($t))."'"; $this->Query(" INSERT INTO `$table` ( $keys ) VALUES ( $vals ) "); return mysql_insert_id($this->conn); } return false; } function UpdateArray($table,$idname,$id,$a=array()) { if(!empty($table)) { $set = ''; foreach($a as $k => $v) { $set .= "`".$k."` = '".mysql_escape_string($v)."', "; } $set = trim($set,', '); $this->Query(" UPDATE $table SET $set WHERE `$idname` = '$id' "); } return $id; } function Delete($table,$idname,$id) { $this->Query("DELETE FROM `$table` WHERE `$idname` = '$id'"); } function Count($table,$where='') { if(!empty($where)) $cnt = $this->QueryObject("SELECT count(*) AS cnt FROM $table AS cnt WHERE $where"); else $cnt = $this->QueryObject("SELECT count(*) AS cnt FROM $table"); return $cnt->cnt; } function Escape($var) { return mysql_escape_string($var); } function GetInsertId() { return mysql_insert_id($this->conn); } function QueryObjectMemcache($sql) { $MEMCACHE = TSMemCache::GetInstance(); $MEMKEY = 'qo.'.md5($sql); $OBJECTS = $MEMCACHE->Get($MEMKEY); if($OBJECTS) { return $OBJECTS; } $OBJECTS = $this->QueryObject($sql); $MEMCACHE->Set($MEMKEY,$OBJECTS,MEMCACHE_5); return $OBJECTS; } function QueryObjectsMemcache($sql) { $MEMCACHE = TSMemCache::GetInstance(); $MEMKEY = 'qos.'.md5($sql); $OBJECTS = $MEMCACHE->Get($MEMKEY); if($OBJECTS) { return $OBJECTS; } $OBJECTS = $this->QueryObjects($sql); $MEMCACHE->Set($MEMKEY,$OBJECTS,MEMCACHE_5); return $OBJECTS; } } ?>
mr.Gasparyan https://php.ru/manual/book.mysqli.html Читай, читай, читай. Не знаешь английский? Я тоже не знаю. Если не можешь перевести то тебе нефиг делать в программировании, ибо чем ты становишься лучше тем лучше должен быть английский.
Для простых запросов удобно, если помнить список аргументов функции (вместе с подобным классом нужно печатать документацию). Но если нужно провернуть запрос посложнее, то нужно копать исходный код, чтобы понять, как его организовать через данный метод.