Неопределенная функция mysql_connect ()


83

Я запустил aptitude install php5-mysql(и перезапустил MySQL / Apache 2), но все еще получаю эту ошибку:

Неустранимая ошибка: вызов неопределенной функции mysql_connect () в /home/validate.php в строке 21

phpinfo() говорит, что файл /etc/php5/apache2/conf.d/pdo_mysql.ini был проанализирован.


Как насчет других встроенных функций PHP / MySql? Они работают?
— samayo

Возможно, нет, так как я попытался ввести неправильный пользователь / пароль, и мое выражение «или умереть» не отображается!
— user1765369

Ответы:


53

Что ж, это твой шанс! Похоже, PDO готов; используйте это вместо этого.

Попробуйте проверить, загружается ли модуль расширения PHP MySQL:

<?php
    phpinfo();
?>

Если его там нет, добавьте в php.iniфайл следующее:

extension=php_mysql.dll

Это лучший способ подключения к базе данных? Я изучу это, но мне бы очень хотелось, чтобы это работало в первую очередь, поскольку оно работало раньше, пока я не перешел на новый сервер.
— user1765369

2
Это. mysql_*функции опасны и устарели с PHP 4.1. Проверьте журналы ошибок Apache и перезапустите сервер. Это работает?
— wanovak

Я использую xampp, после добавления этой строки в php.ini я получаю следующее сообщение в apache error.log Невозможно загрузить динамическую библиотеку '\\ xampp \\ php \\ ext \\ php_mysql.dll
— bigpony

1
@defmx Существует ли по этому пути файл .dll? Если нет, вам нужно его установить.
— wanovak

65

В случае, если вы уже используете PHP7, ранее устаревшие функции mysql_*были полностью удалены, поэтому вам следует обновить свой код, используя mysqli_*вместо них функции или функции PDO .

Если это невозможно, в качестве обходного пути я создал небольшой включаемый файл PHP, который воссоздает старые mysql_*функции с помощью -functionsmysqli_*() : fix_mysql.inc.php


1
Идеальное решение для моего случая, я еще не мог просто обновить и сломать весь свой существующий код. Однако глобальная переменная $ con в вашем файле была проблемой, потому что включенный файл не смог прочитать глобальную переменную родительского класса, в конструктор которого я его включил. Однако я просто создал переменную соединения внутри функций включенного файла там, где это необходимо. Теперь мой код работает нормально. Спасибо.
— zeeshan 01

это очень помогло мне снова запустить старую кодовую базу на новой серверной платформе. ура!
— mxmader 01

4
Спасибо .. это спасло мне жизнь, когда производство было обновлено до php7, а приложение php5 вышло из строя
— geekonweb

Это отличный обходной путь, позволяющий сэкономить время на обновлении устаревшего приложения PHP. Большое спасибо.
— Джоэл Карунунган

спасибо @ ubo77. избавили от головной боли на устаревшей кодовой базе.
— mikoop

57

Я вижу, что вы отметили это как Ubuntu. Скорее всего драйвер MySQL (и, возможно, MySQL) не установлен. Предполагая, что у вас есть SSH или доступ к терминалу и разрешения sudo, войдите на сервер и запустите это:

sudo apt-get install mysql-server mysql-client php5-mysql

Если пакеты MySQL или пакет php5-mysql уже установлены, это обновит их.


ОБНОВИТЬ

Поскольку этот ответ по-прежнему получает случайные щелчки, я собираюсь обновить его, включив PHP 7 . PHP 7 требует другого пакета для MySQL, поэтому вы захотите использовать другой аргумент для команды apt-get.

sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql

И, что немаловажно, mysql_connect()не рекомендуется использовать с PHP v5.5.0. См. Официальную документацию здесь: PHP: mysql_connect ()


Мне не удается найти пакет php7.0
— странные времена

Заменить 7.0 на 7.3
— rubo77

46

Если кто-то пришел сюда с проблемой официальных изображений docker php , введите команду ниже внутри контейнера docker.

$ docker-php-ext-install mysql mysqli pdo pdo_mysql

Для получения дополнительной информации перейдите по ссылке выше в How to install more PHP extensionsразделе (но для меня это немного сложно ...).

Или этот документ может вам помочь.

https://docs.docker.com/samples/library/php/


4
mysqlэто то, что я хочу
— deFreitas

17

Я также столкнулся с той же проблемой неопределенного MySQL_connect (). Я попытался внести изменения в файл PHP.ini, но он дал мне ту же ошибку. Затем я пришел к этому решению, где изменил свой код с устаревших функций php на новые функции.

$con=mysqli_connect($host,$user,$password);

mysqli_select_db($con,dbname); 
//To select the database

session_start(); //To start the session

$query=mysqli_query($con,your query); 
//made query after establishing connection with database.

Я надеюсь, что это поможет вам . У меня это решение работает правильно.

РЕДАКТИРОВАТЬ:

Если вы обновляете старый php, вам необходимо apt-get install php7.0-mysql



6

Пытаться:

<?php
  phpinfo();
?>

Запустите страницу и найдите mysql. Если не найдено, запустите в оболочке следующее и перезапустите сервер Apache:

sudo apt-get install mysql-server mysql-client php5-mysql

Также убедитесь, что у вас есть все следующие строки без комментариев где-нибудь в вашем файле apache2.conf (или в вашем conf.d / php.ini) из

;extension=php_mysql.so

к

extension=php_mysql.so

4

Я предполагаю, что ваша установка PHP не была скомпилирована с поддержкой MySQL.

Проверьте свою команду настройки ( php -i | grep mysql). Вы должны увидеть что-то вроде '--with-mysql=shared,/usr'.

Вы можете проверить полные инструкции на http://php.net/manual/en/mysql.installation.php . Хотя я бы предпочел решение, предложенное @wanovak.

Тем не менее, я думаю, вам нужна поддержка MySQL, чтобы использовать PDO.


1

Вопрос помечен ubuntu, но решение не комментировать вопрос extension=mysqli.dllотносится к windows. Я запутался здесь?!, В любом случае, сначала запустите <? php phpinfo ?>и найдите mysql*под Configurationзаголовком. Если вы этого не видите, значит, вы не установили или не включили php-mysql. Итак, сначала установитеphp-mysql

sudo apt get install php-mysql

Эта команда будет установлена ​​в php-mysqlзависимости от того, что phpвы уже установили, поэтому не беспокойтесь о версии !!.

Затем идет специальное решение для unix, в php.iniфайле не комментируйте строку

extension=msql.so

убедитесь , что msql.soприсутствует в /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so

Затем , наконец , перезапустить apacheи mysqlуслуги, и теперь вы должны увидеть mysqlраздел под Configrationsзаголовком вphpinfo page


0

Я получал эту ошибку, потому что проект, над которым я работал, был разработан на php 5.6, и после установки проект не смог запустить на php7.1.

Для всех, кто использует Vagrant с ubuntu / nginx, в каталоге nginx (/ etc / nginx /) есть каталог с именем «sites-available», который содержит файл с именем, похожим на URL-адрес, настроенный для vagrant maschine. В моем случае это был homestead.app. В этом файле есть строка, которая говорит что-то вроде

    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;

Там вы можете изменить версию php на желаемую для этого конкретного сайта.

Погуглил, но не смог найти простого ответа, в котором говорилось бы, где искать и что менять.

Надеюсь, что это кому-нибудь поможет. Благодарю.


0

Для CentOS 7.8 и PHP 7.3

yum install rh-php73-php-mysqlnd

А затем перезапустите apache / php.


-1

Если вы получаете сообщение об ошибке как

Неустранимая ошибка: вызов неопределенной функции mysql_connect ()

Пожалуйста, войдите в cPanel >> Нажмите Выбрать версию Php >> выберите расширение MYSQL


4
В вопросе нет никаких предположений, что OP использует CPanel.
— Квентин

-3

Должна быть какая-то синтаксическая ошибка. Скопируйте / вставьте этот код и посмотрите, работает ли он:

<?php
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect:' . mysql_error());
    }
    echo 'Connected successfully';
    ?

У меня было такое же сообщение об ошибке. Оказывается, я использовал msql_connect()функцию вместо mysql_connect().


OP имеет неопределенную функцию mysql_connect, а не msql_connect, поэтому он не ввел ее неправильно, как вы предлагаете.
— logicbloke

-3

(Конфигурация Windows mysql)

Шаг 1. Перейдите в Панель управления Apache> Apache> Конфигурация> PHP.ini

Шаг 2: Найдите в Блокноте (Ctrl + F) для: ;extension_dir = ""(можно прокомментировать с помощью ;). Замените эту строку на: extension_dir = "C:\php\ext"(пожалуйста, не удаляйте; в начале предложения).

Шаг 3: Найдите: extension=php_mysql.dllи удалите ;в начале.

Шаг 4: Сохраните и перезапустите HTTP-сервер Apache. (В Windows это обычно делается через пользовательский интерфейс)

Это оно :)

Если вы получите сообщение об отсутствии, php_mysql.dllвам, вероятно, придется загрузить этот файл либо с сайта php.net, либо с pecl.php.net. (Пожалуйста, объясните, откуда вы его взяли)

Подробнее о PHP: Установка расширений в Windows - Руководство


1
Хотя это может быть правильным для Windows, этот вопрос помечен как Ubuntu, которого, безусловно, нет C:\\phpв системе.
— tadman

@tadman не имеет значения, если это для Ubuntu, он работал у меня сегодня после новой установки в Windows.
— Рави Гаурав Панди

1
@RaviGauravPandey Первоначальный вопрос относился к Ubuntu. Дело не в том, что это работает для вас в Windows. Это ответ Windows на вопрос Ubuntu.
— тадман 01
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.