Превращение ошибок вопроса к Исключениям в MySQLi

Я пытаюсь повернуть ошибки вопроса MySQLi к Исключениям, но не мог - mysqli_sql_exception брошен, только если это не соединило DB.

Я использовал mysqli_report (MYSQLI_REPORT_STRICT) и процедурные функции MySQLi, включенные к таможенному классу обертки.

Бывший код:

public function mysqlQuery($SQL) {

    $this->Result = mysqli_query($this->DBlink, $SQL);

    if($this->Result === false)
        throw new MySQLiQueryException($SQL, mysqli_error($this->DBlink), mysqli_errno($this->DBlink));

    return $this->Result;

}

Question: Is it normal no Warning, nor Exception are thrown when query fails so I have to check if mysqli_query() returned false?

19
nl ja de
Насколько я знаю, что mysqli только бросает исключение только на DB, соединяются. Так... в значительной степени, да. У вас есть mysqli_errno, mysqli_error и другие функции, таким образом, вы знаете ошибку, но that' s предел.
добавлено автор Vlad Preda, источник
@k102, я пытался поместить ту часть в MySQLi из моего кода.
добавлено автор Roman Newaza, источник
@VladPreda, как который я вижу, швы, я должен оставить его, как это теперь.
добавлено автор Roman Newaza, источник
Можно бросить исключения, если sometning идет не так, как надо только с попытка, выгода, бросок
добавлено автор k102, источник

3 ответы

Некоторое время назад мне удалось уладить этот вопрос. Поскольку на это указали в другой ответ,

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

правильный путь состоит в том, чтобы сказать mysqli бросать исключения.

Однако, если вы обертываете функции mysqli в свою собственную обертку (как все должны!) - это не имеет слишком большого значения. Так или иначе необходимо будет добавить код, чтобы проверить на успех - быть им если или выгода . Все же будет очень ограниченное количество требований, таким образом, оно не создало бы слишком много неприятностей.

Но все эти люди, которые "двигаются" от MySQL до mysqli из-за всего этого повального увлечения движения (но оставляют подход тем же самым и имеют функции mysqli на всем протяжении кода), извлечет выгоду из этого урегулирования существенно (если бы они не будут следовать за общей привычкой к обертыванию каждого вызова функции в выгоду попытки, которая была бы бесполезна).

21
добавлено
Да, ваш вопрос ясен. Но it' s (очень) хорошая практика, чтобы использовать функцию обертки, чтобы выполнить вопросы, как только у вас есть это, it' s тривиальный, чтобы добавить те дополнительные две линии.
добавлено автор Karoly Horvath, источник
Это - то, как это теперь. I' m выяснение, если возможно приказать водителю MySQLi бросать Исключения, то же самое, как вы делаете с PDO.
добавлено автор Roman Newaza, источник

я должен проверить, возвратился ли mysqli_query() ложный?

Нет.

Необходимо быть в состоянии сделать то, чего вы требуете и приказываете mysqli водителю бросать исключения на ошибки SQL, но необходимо будет позволить MYSQLI_REPORT_ERROR , если это уже не....

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)

mysqli_query() should now throw exceptions on error. You do not need to check the return value for failure (which won't happen anyway because an exception is thrown).

public function mysqlQuery($SQL) {
    try {
        $this->Result = mysqli_query($this->DBlink, $SQL);
    } catch (mysqli_sql_exception $e) {
        throw new MySQLiQueryException($SQL, $e->getMessage(), $e->getCode());
    }
    return $this->Result;
}

(NB: I changed $this->SQL to $SQL in the re-thrown exception.)

18
добавлено
@LouisLoudogTrottier Да, getCode() является методом mysqli_sql_exception объект, так только доступно в пределах блока выгоды того типа исключительной ситуации.
добавлено автор MrWhite, источник
Действительно ли ti - то, что вы используете mysqli_sql_exception', которые позволяют использование $e-метода> getCode ()', и это отразит $mysqli-> errno, я предполагаю?
добавлено автор Louis Loudog Trottier, источник

Я знаю, что немного слишком поздно, но ради потомства. Я нахожу, что MYSQLI_REPORT_STRICT к строгим, определенным исключениям, где не быть воспитанным, и следовательно они не могли быть обработаны блоком выгоды.

 mysqli_report(MYSQLI_REPORT_ALL);//Traps all mysqli error 

 try {
    $mysqli = new mysqli('localhost','user,'pwd','db');

     /* I don't need to explicitly throw an exception as this is being
      done automatically */

 } catch(Exception $e) {
    echo $e->getMessage();
 }  
0
добавлено
@LouisLogTrottier Исключение объект - родитель всех исключений ( mysqli_sql_exception </ код> является подклассом), таким образом, это естественно поймает все .
добавлено автор MrWhite, источник
$e Исключения поймает mysqli неудачу отдельно или мы должны использовать mysqli_sql_exception $e ? или действительно ли они эквивалентны? или Исключение, используемое из-за mysqli_report (MYSQLI_REPORT_ALL)';?
добавлено автор Louis Loudog Trottier, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp