Niezdefiniowana funkcja mysql_connect ()

83

Uruchomiłem aptitude install php5-mysql(i zrestartowałem MySQL / Apache 2), ale nadal otrzymuję ten błąd:

Błąd krytyczny: wywołanie niezdefiniowanej funkcji mysql_connect () w /home/validate.php w linii 21

phpinfo() mówi, że plik /etc/php5/apache2/conf.d/pdo_mysql.ini został przeanalizowany.

user1765369
źródło
A co z innymi wbudowanymi funkcjami PHP / MySql? Czy oni pracują?
samayo
Być może nie, ponieważ próbowałem wprowadzić nieprawidłowy użytkownik / hasło, a moja instrukcja „or die” się nie wyświetla!
user1765369

Odpowiedzi:

53

Cóż, to Twoja szansa! Wygląda na to, że PDO jest gotowe; użyj tego zamiast tego.

Spróbuj sprawdzić, czy ładowany jest moduł rozszerzenia PHP MySQL:

<?php
    phpinfo();
?>

Jeśli go tam nie ma, dodaj do php.inipliku:

extension=php_mysql.dll
wanovak
źródło
Czy to lepszy sposób na połączenie się z bazą danych? Przyjrzę się temu, ale naprawdę chciałbym, aby to działało najpierw, ponieważ działało wcześniej, dopóki nie przeniosłem się na nowy serwer.
user1765369
2
To jest. mysql_*funkcje są niebezpieczne i przestarzałe od PHP 4.1. Sprawdź dzienniki błędów Apache i zrestartuj serwer. Czy to działa?
wanovak
Używam xampp, po dodaniu tej linii do php.ini pojawia się następujący komunikat w apache error.log Nie można załadować biblioteki dynamicznej '\\ xampp \\ php \\ ext \\ php_mysql.dll
bigpony
1
@defmx Czy plik .dll istnieje w tej ścieżce? Jeśli nie, musisz go zainstalować.
wanovak
65

W przypadku, gdy używasz już PHP7, poprzednio przestarzałe funkcje mysql_*zostały całkowicie usunięte, więc powinieneś zaktualizować swój kod za pomocą funkcji lub mysqli_*funkcji PDO .

Jeśli nie jest to możliwe, jako obejście , utworzyłem mały plik dołączany do PHP, który odtwarza stare mysql_*funkcje za pomocą -functionsmysqli_*() : fix_mysql.inc.php

rubo77
źródło
1
Idealne rozwiązanie dla mojego przypadku, nie mogłem jeszcze po prostu zaktualizować i złamać całego mojego istniejącego kodu. Jednak globalna zmienna $ con w twoim pliku była problemem, ponieważ dołączony plik nie był w stanie odczytać zmiennej globalnej klasy nadrzędnej, w której konstruktor go umieściłem. Jednak w razie potrzeby po prostu utworzyłem zmienną połączenia wewnątrz funkcji dołączonego pliku. Teraz mój kod działa dobrze. Dziękuję Ci.
zeeshan
było to dla mnie bardzo pomocne w ponownym uruchomieniu starej bazy kodu na nowszej platformie serwerowej. Twoje zdrowie!
mxmader
4
Dzięki .. on uratował mi życie, w których produkcja została zaktualizowana do aplikacji php7 i php5 zepsuł
geekonweb
Jest to świetne obejście, które pozwala zaoszczędzić czas związany z aktualizacją starej aplikacji PHP. Wielkie dzięki.
Joel Karunungan
dzięki @ ubo77. zaoszczędził trochę bólu głowy na starszej bazie kodu.
mikoop
57

Widzę, że oznaczyłeś to w Ubuntu. Najprawdopodobniej sterownik MySQL (i prawdopodobnie MySQL) nie jest zainstalowany. Zakładając, że masz dostęp do SSH lub terminala i uprawnienia sudo, zaloguj się do serwera i uruchom to:

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

Jeśli pakiety MySQL lub pakiet php5-mysql są już zainstalowane, spowoduje to ich aktualizację.


AKTUALIZACJA

Ponieważ ta odpowiedź nadal pojawia się sporadycznie, zaktualizuję ją, aby zawierała PHP 7 . PHP 7 wymaga innego pakietu dla MySQL, więc będziesz chciał użyć innego argumentu dla polecenia apt-get.

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

I co ważne, mysql_connect()został uznany za przestarzały od wersji PHP 5.5.0. Zapoznaj się z oficjalną dokumentacją tutaj: PHP: mysql_connect ()

Sarcastron
źródło
Nie mogę zlokalizować pakietu php7.0
strangetimes
Zamień 7.0 na 7.3
rubo77
46

Jeśli ktoś przyszedł tu z problemem z oficjalnymi obrazami docker php , wpisz poniżej polecenie wewnątrz kontenera docker.

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

Aby uzyskać więcej informacji, zapoznaj się z linkiem powyżej How to install more PHP extensionssekcji (Ale jest to dla mnie trochę trudne ...).

Albo ten dokument może ci pomóc.

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

kujiy
źródło
4
mysqljest tym, czego chcę
deFreitas
17

Utknąłem również z tym samym problemem z niezdefiniowanym MySQL_connect () .Próbowałem wprowadzić zmiany w pliku PHP.ini, ale powodowało to ten sam błąd. Potem doszedłem do tego rozwiązania, w którym zmieniłem kod z przestarzałych funkcji php na nowe funkcje.

$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.

Mam nadzieję, że to Ci pomoże . U mnie to rozwiązanie działa poprawnie.

EDYTOWAĆ:

Jeśli zaktualizujesz ze starego php, musisz apt-get install php7.0-mysql

apurva sharma
źródło
7

Próbować:

<?php
  phpinfo();
?>

Uruchom stronę i wyszukaj mysql. Jeśli nie zostanie znaleziony, uruchom następujące polecenie w powłoce i zrestartuj serwer Apache:

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

Upewnij się również, że wszystkie poniższe wiersze zostały odkomentowane gdzieś w pliku apache2.conf (lub w pliku conf.d / php.ini), z

;extension=php_mysql.so

do

extension=php_mysql.so
fortuna
źródło
7

W pliku php.ini

Zmień to

;extension=php_mysql.dll

w

extension=php_mysql.dll
Dominic Amal Joe F.
źródło
4

Domyślam się, że Twoja instalacja PHP nie została skompilowana z obsługą MySQL.

Sprawdź swoje polecenie configure ( php -i | grep mysql). Powinieneś zobaczyć coś takiego '--with-mysql=shared,/usr'.

Pełne instrukcje można znaleźć pod adresem http://php.net/manual/en/mysql.installation.php . Chociaż wolałbym skorzystać z rozwiązania zaproponowanego przez @wanovaka.

Mimo to myślę, że potrzebujesz wsparcia MySQL, aby używać PDO.

Muc
źródło
1

Pytanie jest oznaczone tagiem ubuntu, ale rozwiązanie polegające na usunięciu komentarza extension=mysqli.dlljest specyficzne dla okien. Jestem tu zdezorientowany ?!, w każdym razie, najpierw biegnij <? php phpinfo ?>i szukaj mysql*pod Configurationnagłówkiem. Jeśli nie widzisz czegoś takiego, oznacza to, że nie masz zainstalowanego ani włączonego php-mysql. Więc najpierw zainstalujphp-mysql

sudo apt get install php-mysql

To polecenie zainstaluje się w php-mysqlzależności od phpjuż zainstalowanej wersji, więc nie martw się o wersję !!.

Następnie pojawia się rozwiązanie specyficzne dla unixa, w php.inipliku bez komentarza linii

extension=msql.so

sprawdź, czy msql.sojest obecny w /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so

Następnie w końcu uruchom ponownie usługi apachei mysql, a teraz powinieneś zobaczyć mysqlsekcję pod Configrationsnagłówkiemphpinfo page

Dota2
źródło
0

Otrzymałem ten błąd, ponieważ projekt, nad którym pracowałem, został opracowany na php 5.6 i po instalacji projekt nie mógł działać na php7.1.

Tylko dla każdego, kto używa Vagrant z ubuntu / nginx, w katalogu nginx (/ etc / nginx /) znajduje się katalog o nazwie „sites-available”, który zawiera plik o nazwie takiej jak adres URL skonfigurowany dla urządzenia włóczącego się. W moim przypadku był to homestead.app. W tym pliku znajduje się wiersz, który mówi coś w rodzaju

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

Tam możesz zmienić wersję php na żądaną dla tej konkretnej witryny.

Wyszukałem w Google, ale tak naprawdę nie byłem w stanie znaleźć prostej odpowiedzi, która mówi, gdzie szukać i co zmienić.

Mam nadzieję, że to pomoże każdemu. Dzięki.

freifede
źródło
0

Dla CentOS 7.8 i PHP 7.3

yum install rh-php73-php-mysqlnd

A następnie uruchom ponownie Apache / php.

PJunior
źródło
-1

Jeśli otrzymujesz błąd jako

Błąd krytyczny: wywołanie niezdefiniowanej funkcji mysql_connect ()

Prosimy o zalogowanie się do cPanel >> Kliknij Wybierz wersję PHP >> wybierz rozszerzenie MYSQL

Abhishek Vaingade
źródło
4
W pytaniu nie ma sugestii, że PO używa CPanel.
Quentin
-3

Musi być jakiś błąd składni. Skopiuj / wklej ten kod i zobacz, czy działa:

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

Miałem ten sam komunikat o błędzie. Okazuje się, że msql_connect()zamiast mysql_connect().

Lara Croft
źródło
OP ma niezdefiniowaną funkcję mysql_connect, a nie msql_connect, więc nie wpisał jej nieprawidłowo, jak sugerujesz.
logicbloke
-3

(Konfiguracja Windows mysql)

Krok 1: Przejdź do Panelu sterowania Apache> Apache> Konfiguracja> PHP.ini

Krok 2: Wyszukaj w Notatniku (Ctrl + F) dla: ;extension_dir = ""(można skomentować za pomocą ;). Zastąp tę linię: extension_dir = "C:\php\ext"(nie musisz usuwać znaku ;na początku zdania).

Krok 3: Wyszukaj: extension=php_mysql.dlli usuń ;na początku.

Krok 4: Zapisz i uruchom ponownie serwer Apache HTTP. (W systemie Windows odbywa się to zwykle za pośrednictwem interfejsu użytkownika)

Otóż ​​to :)

Jeśli otrzymujesz błędy dotyczące zaginięcia php_mysql.dll, prawdopodobnie będziesz musiał pobrać ten plik z witryny php.net lub pecl.php.net. (Proszę, dowiedz się, skąd to masz)

Więcej informacji o PHP: Instalacja rozszerzeń w systemie Windows - Instrukcja

Piash Sarker
źródło
1
Chociaż może to być poprawne w przypadku systemu Windows, to pytanie jest oznaczone jako Ubuntu, którego z pewnością nie ma C:\\phpw systemie.
tadman
@tadman nie ma znaczenia, czy to dla Ubuntu, zadziałało dla mnie dzisiaj po nowej instalacji w systemie Windows.
Ravi Gaurav Pandey
1
@RaviGauravPandey Pierwotne pytanie dotyczyło Ubuntu. Nie chodzi o to, że to działa w systemie Windows. To jest odpowiedź systemu Windows na pytanie dotyczące Ubuntu.
tadman