Здраствуйте форумчани, вот начал изучать эту базу даных, так как в php 5.5 уже обычного MySQL нету, а в место его появился MySQLi, и я подался в поиски нормально, и простенькой обертки для работы с ней. В гугле ничего толкового не нашол. Так что помогите найти чтото. пожалуйста.
Её сами пишут зачастую.
Как вариант - PDO, для меня удобнее чем MySQLi и оберток ненадо.
Зачем вообще нужны обертки ?
Saniok, Держи:
Незабудь установить обработчик не пойманных исключений set_exception_handler() иначе будет ошибку выбивать ну или просто die вместо throw поставь в конструкторе
<?php
/**
* Db
* Provides access to the database
* @author Screamer <nwotnbm@gmail.com>
*/
class Db extends mysqli
{
/**
* @var (array)
* Contains all errors which were occured
*/
protected $_debug_messages = array();
/**
* Construct
* Get connection parameters. Connect to mysql server. Setup connection charset
* Description of connection parameters:
* @param (string) $host hostname
* @param (string) $user username
* @param (string) $password password
* @param (string) $db database
* @param (string) $charset charset
* @throws (Exception) Unable to connect to MySQL server
* @return (void)
*/
public function __construct($host = 'localhost', $user = 'root', $password = '', $db = 'localhost', $charset = 'utf8')
{
if (parent::__construct($host, $user, $password, $db) === FALSE) {
throw new Exception('Unable to connect to MySQL server. Check your configuration file.');
}
// Setup charset
$this->query("SET NAMES " . $charset);
}
/**
* Analog of mysql_result()
* @param (mysqli_result) $result result of query
* @return (string)
*/
public function result(mysqli_result $result)
{
$result = $result->fetch_row();
return $result[0];
}
public function query($statement, $type = MYSQLI_USE_RESULT)
{
$result = parent::query($statement, $type);
if (!empty($this->error)) {
$this->_debug_messages[] = 'Error: ' . $this->errno . ' ' . $this->error . '
' . 'Statement: ' . $statement;
}
return $result;
}
public function close()
{
parent::close();
try {
if (!empty($this->_debug_messages)) {
// LOG
throw new Exception('<pre>DB ERROR
' . implode('
--
', $this->_debug_messages) . '</pre>');
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
за комменты прошу не пинать кому глаза режет ибо инглиш на уровне школы знаю Гг
Screamer (24.01.2013 / 16:47)
public function result(mysqli_result $result)
а mysqli_result зачем там пишется?
Screamer (05.02.2013 / 16:27)
Tadochi, http://php.net/manual/ru/langu ... g.php
А зачем обёртка нужна что она дает ?
Fenixrus, можно подстроить под себя то что нужно, например сделать лог запросов и ошибог что бы по сто раз не писать одно и тоже в куче файлов.
Или же добавить какой то свой функционал используя существующий.
Ну и еще вот пример:
$result = $mysqli->query("SELECT * FROM `test`");
while ($data[] = $result->fetch_assoc());
$result1 = $mysqli->query("SELECT * FROM `test1`");
// при осуществлении второго запроса вылетит ошибка
// Commands out of sync; you can't run this command now
// Что бы ее избежать нужно вставить перед запросом $result->free();
// Или передать вторым параметром в query() (в первом запросе) MYSQLI_USE_RESULT
Для того что бы не писать по сто раз MYSQLI_USE_RESULT или $result->free();
Можно переопределить функцию query() и сделать значение второго параметра по умолчанию MYSQLI_USE_RESULT
для этого как раз и понадобится обертка.
Screamer (05.02.2013 / 17:05)
Fenixrus, можно подстроить под себя то что нужно, например сделать лог запросов и ошибог что бы по сто раз не писать одно и тоже в куче файлов.
Или же добавить какой то свой функционал используя сущ
Т.е. В основном для сокращения имени стандартных функции