PHP: <?php try{ $this->mysqli = new mysqli('server','login','pass','my_db'); if(!$this->mysqli){ throw new Exception('connect databases faild!'); } } catch(Exception $e) { $this->_fault($e->getMessage()); } ?> прав на БД у учетной записи нет. но и не выдается ошибки, она выявляется позже. вопрос: можно ли как-то отловить либо как-то переписать код, чтобы отлавливать ошибку отсутствия прав на базу?
А если вместо: PHP: <?php if(!$this->mysqli){ throw new Exception('connect databases faild!'); } ?> Поставить PHP: <?php if ($this->connect_errno()) { throw new Exception('connect databases faild!'); } ?>
dAllonE не-а PHP: <?php try{ $this->mysqli = new mysqli('server','login','pass','my_db'); if($this->mysqli->connect_error){ exit('1'); throw new Exception('connect databases faild!'); } else { exit('2'); } } catch(Exception $e) { $this->_fault($e->getMessage()); } ?> выводит "2", прав на базу нет
DarkElf Я на днях тоже пробовал отловить ошибку базы при подключении. Если она не доступна, почему-то вываливается ошибка + мой текст исключения... Не уж то придется по старинке die();..
Kreker а die() тоже не помогает.. при использовании такого конструктора, похоже, недоступность базы по правам вообще не проверяется. Psih имхо, разовый случай, хотя и отнявший на поиски причины пару часов. не стоит ради него что-то переписывать
PHP: <?php class my{ public function __construct(){ try{ $this->mysqli = new mysqli('server','login','pass','my_db'); if(mysqli_connect_error()){ throw new Exception('Ошибка соединения с БД: '.mysqli_connect_error()); } } catch(Exception $e) { $this->_fault($e->getMessage()); } } private function _fault($error){ exit($error); } } ?> Код (Text): Ошибка соединения с БД: Access denied for user 'login'@'server' to database 'my_db' т.е. ошибка именно отсутствия прав доступа к конкретной базе данных. EugeneTM так что работает и без обертки, разница в том, что ошибки при соединении вылавливаются только в функции mysqli_connect_error(). НО, если обычную ошибку пробовать отлавливать с помощью mysqli_error(), то будет NULL... PHP 5.2.5
Обертка не помешает не только при коннекте. Ошибки анализировать с ифами нафиг тебе не нада. Сделаешь это один раз и все. Жить проще станет. Этот код без обертки напиши и сравни PHP: try{ $myLink = new MyMySQLi($host, $Login, $Password, $db); $myLink ->myQuery("SET NAMES 'utf8';"); $myLink ->myQuery("SET SESSION collation_connection = 'utf8_general_ci';"); } catch (Exception $e) { // ....... }
PHP: function __construct($host, $userName, $passwd, $dbName) { parent::__construct($host, $userName, $passwd, $dbName); if [b](mysqli_connect_errno())[/b] { throw new Exception(mysqli_connect_error(), mysqli_connect_errno()); } }