Skip to main content

Fatal error: Uncaught Error: Call to undefined function mysql_connect() — как исправить

PHP 7 является новой версией языка программирования. Её предшественницей считается PHP 5, т. к. 6 версия так и не была выпущена для общего пользования в связи с возникшими во время разработки проблемами. Но это отдельная тема, а сегодня мы разберем, когда при переводе сайта с PHP 5 на PHP 7 возникает ошибка Fatal error: Uncaught Error: Call to undefined function mysql_connect(), и как её исправить, чтобы наш ресурс заработал быстрее, стабильнее и надежнее.

Fatal error при переходе с PHP 5 на PHP 7
Сообщение об ошибке

С чем связана ошибка Fatal error

Ошибка, начинающаяся словами «Fatal error: Uncaught Error:», вызывает прекращение работы скрипта. В нашем случае она вместе с рядом других часто появляется при переводе старого сайта с PHP 5 на PHP 7. Выскакивают либо сообщения с уведомлениями об ошибках, либо просто висит белый экран. Здесь есть 2 пути – либо вернуть все назад, переключившись в панели управления хостингом, либо проявить настойчивость, разобраться с этой ошибкой и работать уже с новой версией PHP. Итак, давайте посмотрим, с чем же конкретно связана наша ошибка Fatal error: Uncaught Error: Call to undefined function mysql_connect().

Call to undefined function mysql_connect
Новые версии PHP не поддерживают расширение MySQL

Как видно из самого названия ошибки, проблема связана с тем, что новые версии PHP (начиная с v. 5.5.0) не осуществляют поддержку оригинального расширения MySQL, в связи с чем сайт не собирает и не отправляет данные из БД. В этом случае разработчики предлагают перейти на расширения PDO или MySQLi. Попробуем выполнить несколько простых действий по переходу на MySQLi. Также пользователи иногда сталкиваются с ошибкой Error CertEnroll, возникающей в процессе создания запроса на выпуск сертификата на сайте “Росказна”.

Создание резервных копий сайта

Прежде чем предпринимать какие-либо серьезные попытки исправить ситуацию, необходимо создать резервные копии своего сайта и БД. Также для того, чтобы была неограниченная возможность экспериментировать, добавляем на хостинге еще один сайт и копируем туда файлы, в которые будем вносить различные корректировки. Подобный подход поможет избежать последствий необдуманных или неосторожных действий с данными – мы их уже не потеряем, т. к. они дополнительно хранятся в резервных копиях. Это актуально при решении различных задач, например, при отладке кода на JavaScript иногда приходится решать ошибку TypeError: Cannot read property ‘xxx’ of undefined.

Настройка журнала ошибок

Также настраиваем ведение журнала ошибок (если этого не было сделано ранее). Открываем файл .htaccess и корректируем информацию в нем. Она должна выглядеть следующим образом.

Ошибки записываются в файл .htaccess
Настройка журнала ошибок

Мы найдем файл .htaccess, если пройдем путь /home/login/domains/domain.ru/public_html/, где login – это логин нашего аккаунта, а domain.ru – домен нашего сайта. Третья строка на картинке выше показывает, где лежит файл с ошибками PHP, которые записываются в процессе работы сайта. Открыть error.log и просмотреть журнал ошибок возможно при помощи файлового менеджера в Панели управления.

Переводим сайт на MySQLi

Итак, вначале вносим коррективы в конструкцию, при помощи которой сайт подключается к базе данных. Открываем действующую запись.

Редактируем запись, использующуюся при подключении к БД
Корректируем подключение к БД
  1. Везде mysql меняем на mysqli.
  2. В первой строчке после $password через запятую добавляем $dbname.
  3. Вторую строчку mysql_select_db($dbname, $link) убираем совсем.
  4. В третьей строчке перед ‘set names cp1251’ ставим $link и запятую.

Получается так.

Переориентирование сайта на MySQLi
Внесенные изменения в конструкцию, отвечающую за подключение к БД

В конструкцию, отвечающую за запросы, также вносим изменения. Берем действующую запись.

Запросы сайта, осуществляемые через MySQL
Прежняя конструкция, отвечающая за запросы
  1. Также заменяем mysql на mysqli.
  2. Меняем местами то, что заключено в скобки.

Теперь выглядит так.

Коррективы, внесенные в конструкцию, при помощи которой осуществляются запросы
Измененная конструкция, отвечающая за запросы

Открываем следующие популярные функции:

  • mysql_fetch_array();
  • mysql_fetch_row();
  • mysql_fetch_assoc();
  • mysql_fetch_array();
  • mysql_num_rows();
  • mysql_insert_id();
  • mysql_close().

И везде производим замену mysql на mysqli. Наша картина выглядит следующим образом.

MySQL заменен на MySQLi
Скорректированные популярные функции

Теперь сбор и отправка информации из БД должны осуществляться без сбоев.

CP1251 и PHP 7 – как расшифровать непонятный набор символов

Иногда при написании сайта некоторые программисты используют не процедурный подход, являющийся на данный момент самым кратким решением, не раз доказавшим свою эффективность, а кодировку CP1251 и другие. В этом случае при переходе на PHP 7 на экране компьютера вся информация выглядит как непонятный набор палочек и иероглифов. В этом случае пробуем в файле дополнительной конфигурации .htaccess указать кодировку так.

Корректируем положение на сайте с кодировкой CP1251
Исправляем ситуацию в сайте, написанном при помощи CP1251

Проблемы с компьютером возникают нередко, и многие из них нужно научиться устранять самостоятельно. Например, это такие ситуации, как ошибка html5 Video file not found при просмотре видеороликов в сети или ошибки 0x0001, 0x0003 в дополнительной утилите Nvidia GeForce Experience.

Заключение

В этой статье мы рассмотрели, почему при переводе сайта с PHP 5 на PHP 7 возникает ошибка Fatal error: Uncaught Error: Call to undefined function mysql_connect(), и рассмотрели пути ее решения. Сложного в этом ничего нет, были внесены небольшие коррективы в конструкции, отвечающие за подключение к БД и за запросы. Также коснулись ситуации, когда сайт написан с использованием старой кодировки  CP1251. Надеюсь, что предложенные варианты помогут вам исправить ситуацию и без проблем работать на PHP 7.

Как вы оцените статью?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован.