Veraltet: mysql_connect ()

95

Ich erhalte diese Warnung, aber das Programm läuft immer noch korrekt.

Der MySQL-Code zeigt mir eine Nachricht in PHP:

Veraltet: mysql_connect (): Die Erweiterung mysql ist veraltet und wird in Zukunft entfernt: Verwenden Sie stattdessen mysqli oder PDO in C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php in Zeile 2

Meine connect.inc.phpSeite ist

<?php
  $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?>

Was bedeutet das und wie kann ich die Nachricht entfernen?

Mubashar Ahmed Hassan
quelle
5
Verwenden Sie mysqli_ * -Funktionen oder PDO !!!!
Krish R
Mögliches Duplikat. stackoverflow.com/questions/13944956/…
desbest
3
Zugehöriges Update, die mysql_ * -Funktionen wurden in PHP7 entfernt. Verwenden Sie stattdessen MySQLi.
Techdude

Antworten:

141

Es gibt einige Lösungen für Ihr Problem.

Der Weg mit MySQLi wäre wie folgt:

<?php
$connection = mysqli_connect('localhost', 'username', 'password', 'database');

Das Ausführen von Datenbankabfragen ist ebenfalls einfach und nahezu identisch mit der alten Methode:

<?php
// Old way
mysql_query('CREATE TEMPORARY TABLE `table`', $connection);
// New way
mysqli_query($connection, 'CREATE TEMPORARY TABLE `table`');

Deaktivieren Sie alle veralteten Warnungen, einschließlich der Warnungen von mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

Der genaue Datei- und Zeilenspeicherort, der ersetzt werden muss, lautet "/System/Startup.php> Zeile: 2" error_reporting (E_All); durch error_reporting ersetzen (E_ALL ^ ​​E_DEPRECATED);

Tharindu Kumara
quelle
33

Sie können die Warnung entfernen, indem Sie vor mysql_connect ein '@' hinzufügen.

@mysql_connect('localhost','root','');

Verwenden Sie jedoch, wie in der Warnung angegeben, mysqli oder PDO, da die mysql-Erweiterung in Zukunft entfernt wird.

Wiedergeburt
quelle
1
Ich sehe, dass Sie nicht nur selbst schlechte Praktiken anwenden, sondern auch anderen sagen, dass Sie dies tun sollen
Ihr gesunder Menschenverstand
29
Die Warnung zu verbergen ist eine gute Sache. Es hält das Programm am Laufen und mysql_xxxx-Funktionen bedeuten derzeit kein Problem, da sie in der aktuellen Version gut funktionieren. Alles, was Sie darüber sagen, dass es veraltet ist, ist ein Teil der Fehlermeldung. Es ist also nicht ratsam, dies zu wiederholen. Jeder kann sehen, dass es veraltet ist, ja, danke, als nächstes bitte. In Zukunft werden MySQL-Funktionsaufrufe offensichtlich ersetzt. Bis dahin ist das Ausblenden der Warnung ein praktischer Rat, damit die Site funktionieren kann, während wir stillschweigend mysql_xxx-Aufrufe durch etwas anderes im Hintergrund ersetzen. Sei nicht abergläubisch.
dkellner
5
Unglaublich hilfreiche Kommentare hier. Hinterlassen Sie veraltete Warnungen und brechen Sie Ihren Live-Code? Schön .. Natürlich ist es nicht ideal, die Warnung zu verbergen, aber es sollte trotzdem getan werden, um den Code in Ordnung zu halten. Ein guter Entwickler wird weiterhin veralteten Code verfolgen und ihn für ein zukünftiges Update einplanen.
Sturrockad
1
Durch die Unterdrückung von Fehlern / Warnungen wird dies nicht behoben. Wenn Benutzern auf Ihrem Produktionsserver rohe Warnungen / Fehler angezeigt werden, machen Sie es falsch. Wenn Sie nur einen Produktionsserver und keine Entwicklungsumgebung zum Testen haben, Wenn Sie Fehler / Warnungen in der Entwicklung vor der Freigabe für die Produktion nicht beheben, machen Sie es am falschesten
HorusKol
1
@sturrockad Ein guter Entwickler hätte Fehler besser behandelt, damit sie nie in die Öffentlichkeit gelangen und nur im Back-End angemeldet werden, damit Entwickler sie sehen können. Wenn Sie immer noch Live-Code brechen, indem Sie Fehlermeldungen in die Wildnis geben, sollten Sie wahrscheinlich Ihre gesamte Website überdenken. Das ist keine gültige Entschuldigung, um Warnungen zu unterdrücken.
Animuson
10

Um die Verfallsmeldung allein dafür zu unterdrücken (und über andere Verwerfungen in Ihrem Code informiert zu bleiben), können Sie der Verbindung @ voranstellen:

<?php
$connect = @mysql_connect('localhost','root','');
mysql_select_db('dbname');
?> 
IanMcL
quelle
Beachten Sie, dass dies mit PHP 7+ nicht mehr funktioniert (daher meine Ablehnung). Es ist keine "Lösung" ...
Gwyneth Llewelyn
OP handelt von einer Verfallsmeldung, die nur von PHP 5.5 und 5.6 generiert wird. Die Lösung befindet sich in der Umgebung, in der die OP-Nachricht angezeigt wird.
IanMcL
8

Veraltete Funktionen in PHP 5.5.x.

Die ursprüngliche MySQL-Erweiterung ist jetzt veraltet und führt E_DEPRECATEDbeim Herstellen einer Verbindung zu einer Datenbank zu Fehlern. Verwenden Sie stattdessen die Erweiterungen ** MYSQLi oder PDO_MySQL . **

Syntax:

<?php
  $connect = mysqli_connect('localhost', 'user', 'password', 'dbname');

Auch ersetzen Sie alle mysql_*Funktionen in mysqli_*Funktionen

anstatt

<?php
 $connect = mysql_connect('localhost','root','');
  mysql_select_db('dbname');
?> 
Krish R.
quelle
6

Diese Warnung wird angezeigt, weil eine neue Erweiterung angezeigt wurde. Es wird davon ausgegangen, dass Sie die alte noch verwenden können, aber in einigen Fällen ist dies unmöglich.

Ich zeige Ihnen, wie ich die Verbindung mit der Datenbank herstelle. Sie müssen nur die Werte der Variablen ändern.

Meine Verbindungsdatei: connection.php

<?php    
 $host='IP or Server Name (usually "localhost") ';
 $user='Database user';
 $password='Database password';
 $db='Database name';

 //PHP 5.4 o earlier (DEPRECATED)
 $con = mysql_connect($host,$user,$password) or exit("Connection Error");
 $connection = mysql_select_db($db, $con);

 //PHP 5.5 (New method)
 $connection =  mysqli_connect($host,$user,$password,$db);
?>

Die Erweiterung ändert sich auch beim Ausführen einer Abfrage.

Abfragedatei: "example.php"

<?php
 //First I call for the connection
 require("connection.php");

 // ... Here code if you need do something ...

 $query = "Here the query you are going to perform";

 //QUERY PHP 5.4 o earlier (DEPRECATED)
 $result = mysql_query ($query) or exit("The query could not be performed");

 //QUERY PHP 5.5 (NEW EXTENSION)
 $result = mysqli_query ($query) or exit("The query could not be performed");    
?>

Auf diese Weise wird die verbesserte MySQL-Erweiterung verwendet , Sie können jedoch auch PDO (PHP Data Objects) verwenden .

Die erste Methode kann nur mit MySQL-Datenbanken verwendet werden, PDO kann jedoch verschiedene Arten von Datenbanken verwalten.

Ich werde ein Beispiel geben, aber es muss gesagt werden, dass ich nur das erste verwende. Bitte korrigieren Sie mich, wenn ein Fehler vorliegt.

Meine PDO-Verbindungsdatei: "PDOconnection.php"

<?php
 $hostDb='mysql:host= "Here IP or Server Name";dbname="Database name" ';
 $user='Database user';
 $password='Database password';

 $connection = new PDO($hostDb, $user, $password);
?>

Abfragedatei (PDO): "example.php"

<?php
 $query = "Here the query you are going to perform";
 $result=$connection->$query;
?>

Zum Schluss sagen Sie einfach, dass Sie die Warnung natürlich ausblenden können, aber das ist keine gute Idee, da Sie in Zukunft Zeit sparen können, wenn ein Fehler auftritt (wir alle kennen die Theorie, aber wenn Sie manchmal viele Stunden arbeiten). Gehirn ist nicht da ^^).

jCastellote
quelle
4

Dies liegt daran, dass Sie PHP 5.5 verwenden oder Ihr Webserver auf 5.5.0 aktualisiert wurde.

Die mysql_*Funktionen sind ab 5.5.0 veraltet

Geben Sie hier die Bildbeschreibung ein

Source

Shankar Damodaran
quelle
1

Die Warnung "veraltet" im Allgemeinen bedeutet, dass Sie versuchen, eine veraltete Funktion zu verwenden. Es bedeutet nicht, dass Ihr Code nicht funktioniert, aber Sie sollten ein Refactoring in Betracht ziehen.

In Ihrem Fall sind die Funktionen mysql_ veraltet. Wenn Sie mehr darüber wissen möchten, finden Sie hier bereits eine gute Erklärung: Warum sollte ich in PHP keine mysql_ * -Funktionen verwenden?

MSadura
quelle
1
<?php 
$link = mysqli_connect('localhost','root',''); 
if (!$link) { 
    die('Could not connect to MySQL: ' . mysqli_error()); 
} 
echo 'Connection OK'; mysqli_close($link); 
?>

Dies wird Ihr Problem lösen.

zubair1024
quelle
1

Die PDO-Klasse ersetzt diese Methoden. Beispiel für MySQL oder MariaDB:

$BDD_SQL = new PDO('mysql:host='.BDD_SQL_SERVER.';dbname='.BDD_SQL_BASE.';charset=utf8', 
        BDD_SQL_LOGIN, BDD_SQL_PWD, 
        array(
          PDO::ATTR_EMULATE_PREPARES => false,
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //launch exception if error
          PDO::ATTR_DEFAULT_FETCH_MODE=> PDO::FETCH_ASSOC
                ));

Quelle: gU-Klasse

Karima Rafes
quelle
1

Wenn Sie dann Ihre Codierung durchgeführt haben

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 

ist eine gute Option, aber wenn Sie am Anfang sind, sollten Sie auf jeden Fall mysqli verwenden.

Manoj Sharma
quelle
1

Nun, ich habe mich heute einer solchen Nachricht gestellt, als ich zu einem neuen Hosting gewechselt bin! Trotzdem habe ich versucht, "mySQL" in "mySQLi" zu ändern, aber es funktioniert nicht, also habe ich dies getan:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
# Turn off all error reporting
error_reporting(0);
$connect_myconn = "Database Connection";
$hostname_myconn = "localhost";
$database_myconn = "db name";
$username_myconn = "user name";
$password_myconn = "pass";
$myconn = mysql_connect($hostname_myconn, $username_myconn, $password_myconn) or die("<h1 style=margin:0;>A MySQL error has occurred.</h1><p><b>Your Query:</b> " . $connect_myconn . "<br /> <b>Error Number:</b> (" . mysql_errno() . ")</p>" . mysql_error());
mysql_select_db($database_myconn, $myconn);
?>

Der Trick besteht darin, die Fehlerberichterstattung auszuschalten :)

# Turn off all error reporting
error_reporting(0);

Für PHP 7+ können Sie stattdessen diesen Code verwenden:

ini_set('display_errors', 0);
ini_set('log_errors', 1);

Vielen Dank

Mizo-Spiele
quelle
1
Hallo, ja, für PHP 7+ können Sie dies verwenden ini_set('display_errors', 0); ini_set('log_errors', 1);. Ich werde die Antwort oben aktualisieren. Vielen Dank.
Mizo Games
-3

füge dies in deine PHP-Seite ein.

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 
Shan
quelle
Beachten Sie, dass dies mit PHP 7+ nicht mehr funktioniert (daher meine Ablehnung). Es ist keine "Lösung" ...
Gwyneth Llewelyn
-5

Hinzufügen eines @Werks für mich!

Ich habe mit getestet error_reporting(E_ALL ^ E_DEPRECATED);

Sici
quelle
1
Sie lösen den Fehler nicht, Sie verstecken nur die Nachricht
Leonardo Sapuy
Beachten Sie, dass dies mit PHP 7+ nicht mehr funktioniert (daher meine Ablehnung). Es ist keine "Lösung" ...
Gwyneth Llewelyn