Неопределенная функция 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.