Я создаю довольно большой сценарий импорта. Я хочу увидеть любые проблемные (необработанные) SQL-запросы. У меня проблема с поиском неправильных SQL-запросов с блоком PHP try-catch.
У меня есть запрос:
SELECT id FROM tag WHERE name IN ()
Конечно, в нем есть ошибка, поэтому я хочу печатать запросы, подобные этому кодом:
$sql = "SELECT id FROM tag WHERE name ".$tagsSql.""; try { $query = mysqli_query($this->mysqli, $sql); $result = $query->fetch_assoc(); } catch(Exception $e) { echo 'Problem with: '.$sql; print_r($e); die; }
При запуске скрипта PHP просто бросает мне это:
Fatal error: Call to a member function fetch_assoc() on a non-object in C:\www\blackboard-import\index.php on line 227
Почему эта ошибка не улавливается? Потому что это фатально? Как я могу справиться с такими ситуациями? Я использую mysqli для связи с MySQL.
Это не регулярное исключение, а фатальная ошибка (которая заставляет PHP закрываться). mysqli_query()
возвращает false при ошибке, поэтому ваш текущий скрипт терпит неудачу, поэтому решение может быть примерно следующим:
try { $query = $this->msqli->query($sql); if ($query === FALSE) { throw new Exception($this->mysqli->error); } $result = $query->fetch_assoc(); } catch(Exception $e) { //... }