Undefinierte Funktion mysql_connect ()

82

Ich habe aptitude install php5-mysqlMySQL / Apache 2 ausgeführt (und neu gestartet), erhalte jedoch immer noch den folgenden Fehler:

Schwerwiegender Fehler: Aufruf der undefinierten Funktion mysql_connect () in /home/validate.php in Zeile 21

phpinfo() sagt, dass die Datei /etc/php5/apache2/conf.d/pdo_mysql.ini analysiert wurde.

user1765369
quelle
Wie wäre es mit anderen eingebauten PHP / MySql-Funktionen? Arbeiten Sie?
Samayo
Vielleicht nicht, da ich versucht habe, einen falschen Benutzer / Pass einzugeben und meine 'oder die'-Anweisung nicht angezeigt wird!
user1765369

Antworten:

53

Nun, das ist deine Chance! Es sieht so aus, als ob PDO bereit ist. Verwenden Sie das stattdessen.

Überprüfen Sie, ob das PHP MySQL-Erweiterungsmodul geladen wird:

<?php
    phpinfo();
?>

Wenn es nicht vorhanden ist, fügen Sie der php.iniDatei Folgendes hinzu :

extension=php_mysql.dll
wanovak
quelle
Ist dies eine bessere Möglichkeit, eine Verbindung zu einer Datenbank herzustellen? Ich werde mich darum kümmern, aber ich möchte wirklich, dass dies zuerst funktioniert, wie es zuvor funktioniert hat, bis ich auf einen neuen Server umgezogen bin.
user1765369
2
Es ist. mysql_*Funktionen sind gefährlich und ab PHP 4.1 veraltet. Überprüfen Sie Ihre Apache-Fehlerprotokolle und starten Sie den Server neu. Funktioniert es?
Wanovak
Ich verwende xampp. Nachdem ich diese Zeile zu php.ini hinzugefügt habe, wird in apache error.log die folgende Meldung angezeigt: Dynamische Bibliothek '\\ xampp \\ php \\ ext \\ php_mysql.dll
bigpony
1
@defmx Existiert die DLL-Datei unter diesem Pfad? Wenn nicht, müssen Sie es installieren.
Wanovak
64

Falls Sie bereits PHP7 verwenden, wurden die zuvor veralteten Funktionen mysql_*vollständig entfernt. Sie sollten Ihren Code daher stattdessen mit den PDO-Funktionen oder mysqli_*-Funktionen aktualisieren .

Wenn das nicht möglich ist, als Abhilfe , habe ich eine kleine PHP - Include - Datei, die die alten nachbildet mysql_*Funktionen mit mysqli_*()-Funktionen: fix_mysql.inc.php

rubo77
quelle
1
Perfekte Lösung für meinen Fall, ich konnte noch nicht einfach ein Upgrade durchführen und meinen gesamten vorhandenen Code brechen. Die globale Variable $ con in Ihrer Datei war jedoch ein Problem, da die enthaltene Datei die globale Variable der übergeordneten Klasse, in die der Konstruktor sie aufgenommen hat, nicht lesen konnte. Bei Bedarf habe ich jedoch einfach eine Verbindungsvariable in den Funktionen der enthaltenen Datei erstellt. Jetzt funktioniert mein Code gut. Vielen Dank.
Zeeshan
Dies war sehr hilfreich für mich, um eine alte Codebasis auf einer neueren Serverplattform wieder zum Laufen zu bringen. Prost!
mxmader
4
Danke .. es hat mir das Leben gerettet, als die Produktion auf PHP7 aktualisiert wurde und die PHP5-Anwendung zusammenbrach
Geekonweb
Dies ist eine großartige Problemumgehung, um Zeit zu sparen, wenn Sie eine alte PHP-Anwendung aktualisieren müssen. Danke vielmals.
Joel Karunungan
danke @ ubo77. sparte einige Kopfschmerzen auf einer alten Codebasis.
Mikoop
57

Ich sehe, dass Sie dies mit Ubuntu markiert haben. Höchstwahrscheinlich ist der MySQL-Treiber (und möglicherweise MySQL) nicht installiert. Angenommen, Sie haben SSH- oder Terminalzugriff und Sudo-Berechtigungen, melden Sie sich beim Server an und führen Sie Folgendes aus:

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

Wenn die MySQL-Pakete oder das php5-mysql-Paket bereits installiert sind, werden sie aktualisiert.


AKTUALISIEREN

Da diese Antwort immer noch gelegentlich angeklickt wird, werde ich sie aktualisieren, um PHP 7 einzuschließen . PHP 7 erfordert ein anderes Paket für MySQL, daher sollten Sie ein anderes Argument für den Befehl apt-get verwenden.

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

Und was wichtig ist, mysql_connect()ist seit PHP v5.5.0 veraltet. Lesen Sie hier die offizielle Dokumentation: PHP: mysql_connect ()

Sarcastron
quelle
Ich kann das Paket php7.0 nicht finden
seltsamerweise
Ersetzen Sie 7.0 durch 7.3
rubo77
46

Wenn jemand mit dem Problem der offiziellen Bilder von Docker PHP hierher gekommen ist , geben Sie den folgenden Befehl in den Docker-Container ein.

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

Weitere Informationen finden Sie unter dem obigen Link How to install more PHP extensions(aber es ist ein bisschen schwierig für mich ...).

Oder dieses Dokument kann Ihnen helfen.

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

kujiy
quelle
4
mysqlist was ich will
deFreitas
16

Ich hatte auch das gleiche Problem mit undefiniertem MySQL_connect (). Ich habe versucht, Änderungen an der PHP.ini-Datei vorzunehmen, aber es gab mir den gleichen Fehler. Dann kam ich zu dieser Lösung, bei der ich meinen Code von veralteten PHP-Funktionen in neue Funktionen änderte.

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

Ich hoffe, dies wird dir helfen . Diese Lösung funktioniert bei mir richtig.

BEARBEITEN:

Wenn Sie von alten PHP aktualisieren, müssen Sie apt-get install php7.0-mysql

Apurva Sharma
quelle
6

In der Datei php.ini

ändere das

;extension=php_mysql.dll

in

extension=php_mysql.dll
Dominic Amal Joe F.
quelle
5

Versuchen:

<?php
  phpinfo();
?>

Führen Sie die Seite aus und suchen Sie nach mysql . Wenn nicht gefunden, führen Sie Folgendes in der Shell aus und starten Sie den Apache-Server neu:

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

Stellen Sie außerdem sicher, dass alle folgenden Zeilen irgendwo in Ihrer Datei apache2.conf (oder in Ihrer Datei conf.d / php.ini) von nicht kommentiert sind

;extension=php_mysql.so

zu

extension=php_mysql.so
Vermögen
quelle
4

Ich vermute, Ihre PHP-Installation wurde nicht mit MySQL-Unterstützung kompiliert.

Überprüfen Sie Ihren Konfigurationsbefehl ( php -i | grep mysql). Sie sollten so etwas sehen'--with-mysql=shared,/usr' .

Vollständige Anweisungen finden Sie unter http://php.net/manual/en/mysql.installation.php . Ich würde mich jedoch lieber für die von @wanovak vorgeschlagene Lösung entscheiden.

Dennoch denke ich, dass Sie MySQL-Unterstützung benötigen, um PDO verwenden zu können.

Muc
quelle
1

Die Frage ist mit markiert ubuntu, aber die Lösung zum Aufheben des Kommentierens extension=mysqli.dllist spezifisch für Windows. Ich bin hier verwirrt ?!, sowieso, als erstes laufen <? php phpinfo ?>und mysql*unter ConfigurationÜberschrift suchen . Wenn Sie so etwas nicht sehen, bedeutet dies, dass Sie es nicht installiert oder aktiviert haben php-mysql. Also zuerst installierenphp-mysql

sudo apt get install php-mysql

Dieser Befehl wird php-mysqlabhängig von der phpbereits installierten Version installiert, sodass Sie sich keine Sorgen um die Version machen müssen !!

Dann kommt die Unix-spezifische Lösung, in der php.iniDatei die Zeile auskommentieren

extension=msql.so

überprüfen, ob msql.soin ist /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so

Starten Sie dann endlich die apacheund mysqlDienstleistungen, und Sie sollten nun die siehe mysqlAbschnitt unter ConfigrationsÜberschrift inphpinfo page

Dota 2
quelle
0

Ich habe diesen Fehler erhalten, weil das Projekt, an dem ich gearbeitet habe, auf PHP 5.6 entwickelt wurde und nach der Installation das Projekt nicht auf PHP 7.1 ausgeführt werden konnte.

Nur für alle, die Vagrant mit Ubuntu / nginx verwenden, gibt es im Nginx-Verzeichnis (/ etc / nginx /) ein Verzeichnis mit dem Namen "sites-available", das eine Datei mit dem Namen der für die Vagrant-Maschine konfigurierten URL enthält. In meinem Fall war homestead.app. In dieser Datei gibt es eine Zeile, die so etwas wie sagt

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

Dort können Sie die PHP-Version auf die gewünschte für diese bestimmte Site ändern.

Googelte dies, konnte aber nicht wirklich eine einfache Antwort finden, die besagte, wo man suchen und was man ändern sollte.

Hoffe, dass dies jedem hilft. Vielen Dank.

freifede
quelle
0

Für CentOS 7.8 und PHP 7.3

yum install rh-php73-php-mysqlnd

Und dann Apache / PHP neu starten.

PJunior
quelle
-1

Wenn Sie den Fehler als erhalten

Schwerwiegender Fehler: Aufruf der undefinierten Funktion mysql_connect ()

Bitte melden Sie sich beim cPanel an >> Klicken Sie auf PHP-Version auswählen >> wählen Sie die Erweiterung MYSQL

Abhishek Vaingade
quelle
4
Die Frage, dass das OP CPanel verwendet, enthält keinen Hinweis.
Quentin
-3

Es muss ein Syntaxfehler vorliegen. Kopieren Sie diesen Code / fügen Sie ihn ein und prüfen Sie, ob er funktioniert:

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

Ich hatte die gleiche Fehlermeldung. Es stellt sich heraus, dass ich die msql_connect()Funktion anstelle von verwendet habe mysql_connect().

Lara Croft
quelle
OP hat die undefinierte Funktion mysql_connect und nicht msql_connect, sodass er sie nicht falsch eingegeben hat, wie Sie vorschlagen.
Logicbloke
-3

(Windows MySQL-Konfiguration)

Schritt 1: Gehen Sie zu Apache Control Panel> Apache> Config> PHP.ini

Schritt 2: Suchen Sie im Editor (Strg + F) nach: ;extension_dir = ""(könnte mit a kommentiert werden ;). Ersetzen Sie diese Zeile durch: extension_dir = "C:\php\ext"(Bitte müssen Sie das ;am Anfang des Satzes nicht entfernen ).

Schritt 3: Suchen nach: extension=php_mysql.dllund entfernen Sie die ;am Anfang.

Schritt 4: Speichern und starten Sie Ihren Apache HTTP Server neu. (Unter Windows erfolgt dies normalerweise über eine Benutzeroberfläche.)

Das ist es :)

Wenn Sie Fehler wegen fehlender php_mysql.dllInformationen erhalten, müssen Sie diese Datei wahrscheinlich entweder von der Website php.net oder von pecl.php.net herunterladen. (Bitte sei ursächlich darüber, woher du es bekommst)

Weitere Informationen zu PHP: Installation von Erweiterungen unter Windows - Handbuch

Piash Sarker
quelle
1
Während dies für Windows möglicherweise richtig ist, ist diese Frage mit Ubuntu gekennzeichnet, was mit Sicherheit nicht C:\\phpauf dem System vorhanden ist.
Tadman
@tadman spielt keine Rolle, ob das für Ubuntu ist, es hat heute nach einer Neuinstallation unter Windows für mich funktioniert.
Ravi Gaurav Pandey
1
@ RaviGauravPandey Die ursprüngliche Frage betraf Ubuntu. Dass es unter Windows für Sie funktioniert, ist nicht der Punkt. Dies ist eine Windows-Antwort auf eine Ubuntu-Frage.
Tadman