Невизначена функція 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

1
@defmx Чи існує файл .dll за цим шляхом? Якщо ні, то вам потрібно встановити його.
wanovak

65

У випадку, якщо ви вже використовуєте PHP7, раніше застарілі функції mysql_*були повністю видалені, тому вам слід замінити свій код, використовуючи PDO-функції або mysqli_*функції.

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


1
Ідеальне рішення для мого випадку, я ще не міг просто оновити і зламати весь свій існуючий код. Однак глобальна змінна $ con у вашому файлі була проблемою, оскільки включений файл не зміг прочитати глобальну змінну батьківського класу, до якого конструктора я її включив. Однак я просто створив змінну з'єднання всередині функцій включеного файлу там, де це потрібно. Тепер мій код працює нормально. Дякую.
zeeshan

це було мені дуже корисно в тому, щоб стара кодова база знову працювала на новій платформі сервера. ура!
mxmader

4
Дякуємо .. це врятувало мені життя, коли виробництво було оновлено до php7, а програма php5
вийшла з

Це чудове рішення, щоб заощадити час на необхідність оновлення старовинного додатка 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.

Перевірте свою команду configure ( php -i | grep mysql). Ви повинні побачити щось подібне '--with-mysql=shared,/usr'.

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

Тим не менше, я думаю, вам потрібна підтримка MySQL, щоб використовувати PDO.


1

Питання позначено тегом ubuntu, але вирішення питання про відсутність коментарів стосується extension=mysqli.dllWindows. Мене тут бентежить?!, У будь-якому разі, спочатку запустіть <? 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>, ІНШЕ

extension=path/to/msql.so

Потім, нарешті, перезапустіть служби apacheта mysql, і ви повинні побачити mysqlрозділ під Configrationsзаголовком вphpinfo page


0

Я отримав цю помилку, оскільки проект, над яким я працював, був розроблений на php 5.6, і після встановлення проект не зміг запуститися на php7.1.

Просто для тих, хто використовує Vagrant з ubuntu / nginx, у каталозі nginx (/ etc / nginx /) існує каталог із назвою "сайти-доступні", який містить файл із назвою, наприклад, URL-адресу, налаштовану для машини бродяги. У моєму випадку це був 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 = ""(можна прокоментувати за допомогою a ;). Замініть цей рядок на: extension_dir = "C:\php\ext"(не потрібно видаляти ;на початку речення).

Крок 3: Шукайте: extension=php_mysql.dllі видаліть ;на початку.

Крок 4: Збережіть та перезапустіть сервер Apache HTTP. (У 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.
тадмен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.