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.


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

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


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 ()


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/


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



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

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.


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


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.


0

Für CentOS 7.8 und PHP 7.3

yum install rh-php73-php-mysqlnd

Und dann Apache / PHP neu starten.


-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


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().


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.