Obsolète: mysql_connect ()


95

Je reçois cet avertissement, mais le programme fonctionne toujours correctement.

Le code MySQL me montre un message en PHP:

Obsolète: mysql_connect (): L'extension mysql est obsolète et sera supprimée à l'avenir: utilisez plutôt mysqli ou PDO dans C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php sur la ligne 2

Ma connect.inc.phppage est

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

Qu'est-ce que cela signifie et comment puis-je éliminer le message?


5
Utilisez les fonctions mysqli_ * ou PDO !!!!
Krish R


3
Mise à jour connexe, les fonctions mysql_ * ont été supprimées dans PHP7. Utilisez plutôt MySQLi.
techdude

Réponses:


142

Il existe quelques solutions à votre problème.

La manière avec MySQLi serait comme ceci:

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

Pour exécuter des requêtes de base de données est également simple et presque identique à l'ancienne méthode:

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

Désactivez tous les avertissements obsolètes, y compris ceux de mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

L'emplacement exact du fichier et de la ligne à remplacer est "/System/Startup.php> line: 2" error_reporting (E_All); remplacer par error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

Vous pouvez supprimer l'avertissement en ajoutant un '@' avant mysql_connect.

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

mais comme l'avertissement vous le dit, utilisez mysqli ou PDO car l'extension mysql sera supprimée à l'avenir.


1
Je vois que vous n'utilisez pas seulement de mauvaises pratiques tout le temps vous-même, mais que vous dites même aux autres de le faire
Votre bon sens

29
Cacher l'avertissement est une BONNE CHOSE. Cela permet au programme de continuer, et les fonctions mysql_xxxx ne signifient aucun problème pour le moment car elles fonctionnent bien dans la version actuelle. Tout ce que vous dites à propos de sa désapprobation est une PARTIE DU MESSAGE D'ERREUR, donc ce n'est pas une bonne chose à répéter. Tout le monde peut voir qu'il est obsolète, oui, merci, ensuite s'il vous plaît. Dans le futur, les appels de fonction mysql seront évidemment remplacés. Jusque-là, masquer l'avertissement est un conseil pratique pour permettre au site de fonctionner pendant que nous remplaçons silencieusement les appels mysql_xxx par quelque chose d'autre en arrière-plan. Ne soyez pas superstitieux.
dkellner

5
Commentaires incroyablement utiles ici. Laisser les avertissements obsolètes et casser votre code en direct? Bien .. Bien sûr, cacher l'avertissement n'est pas idéal, mais il faut tout de même le faire pour que le code fonctionne. Un bon développeur gardera toujours une trace du code obsolète et le planifiera pour une future mise à jour.
sturrockad

1
la suppression des erreurs / avertissements n'est pas la façon dont cela est résolu - si vous avez des avertissements / erreurs bruts présentés aux utilisateurs sur votre serveur de production, vous le faites mal - si vous n'avez qu'un serveur de production et aucun environnement de développement pour les tests, vous ' vous le faites plus mal - si vous ne corrigez pas les erreurs / avertissements en développement avant de passer en production, vous le faites le plus mal
HorusKol

1
@sturrockad Un bon développeur aurait mieux géré les erreurs afin qu'elles ne fuient jamais dans le public et ne soient connectées que dans le back-end pour que les développeurs les voient. Si vous continuez à briser le code en direct en publiant des messages d'erreur dans la nature, vous devriez probablement repenser l'ensemble de votre site Web. Ce n'est pas une excuse valable pour supprimer les avertissements.
animuson

10

Pour supprimer le message d'obsolescence pour cela seul (et rester informé des autres abandons dans votre code), vous pouvez préfixer la connexion avec @:

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

Notez qu'avec PHP 7+, cela ne fonctionnera plus (donc mon vote négatif); ce n'est pas une `` solution '' ...
Gwyneth Llewelyn

OP concerne un message d'obsolescence généré uniquement par PHP 5.5 et 5.6. La solution se trouve dans l'environnement dans lequel le message OP est affiché.
IanMcL

8

Fonctionnalités obsolètes dans PHP 5.5.x

L' extension MySQL d'origine est désormais obsolète et générera des E_DEPRECATEDerreurs lors de la connexion à une base de données. À la place, utilisez les extensions ** MYSQLi ou PDO_MySQL . **

Syntaxe:

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

En outre, remplacer toutes les mysql_*fonctions en mysqli_*fonctions

au lieu de

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

6

Cet avertissement s'affiche car une nouvelle extension est apparue. Cela suppose que vous pouvez toujours utiliser l'ancien, mais dans certains cas, c'est impossible.

Je vous montre comment je fais la connexion avec la base de données. Il vous suffit de changer les valeurs des variables.

Mon fichier de connexion : 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);
?>

L'extension change également lors de l'exécution d'une requête.

Fichier de requête: "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");    
?>

Cette méthode utilise l' extension améliorée MySQL , mais vous pouvez utiliser PDO (PHP Data Objects) .

La première méthode ne peut être utilisée qu'avec les bases de données MySQL, mais PDO peut gérer différents types de bases de données.

Je vais vous donner un exemple mais il faut dire que je n'utilise que le premier, donc veuillez me corriger s'il y a une erreur.

Mon fichier de connexion PDO: "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);
?>

Fichier de requête (PDO): "example.php"

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

Pour finir, dites simplement que vous pouvez bien sûr cacher l'avertissement, mais ce n'est pas une bonne idée car cela peut vous aider à gagner du temps à l'avenir si une erreur se produit (nous connaissons tous la théorie, mais si vous travaillez parfois beaucoup d'heures ... Le cerveau n'est pas là ^^).


4

En effet, vous utilisez PHP 5.5 ou votre serveur Web aurait été mis à niveau vers la version 5.5.0.

Les mysql_*fonctions sont obsolètes depuis la version 5.5.0

entrez la description de l'image ici

Source




1

L'avertissement «obsolète» signifie en général que vous essayez d'utiliser une fonction obsolète. Cela ne signifie pas que votre code ne fonctionnera pas, mais vous devriez envisager de le refactoriser.

Dans votre cas, les fonctions mysql_ sont obsolètes. Si vous voulez en savoir plus à ce sujet, voici déjà une bonne explication: Pourquoi ne devrais-je pas utiliser les fonctions mysql_ * en PHP?


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

Cela résoudra votre problème.


1

La classe PDO remplace ces méthodes. Exemple pour Mysql ou 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
                ));

Source: Classe AOP


1

Si vous avez fait votre codage alors

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

est une bonne option, mais si vous êtes au début, vous devriez certainement utiliser mysqli.


1

Eh bien, je viens de faire face à un tel message aujourd'hui lorsque je suis passé à un nouvel hébergement! de toute façon j'ai essayé de changer le "mySQL" en "mySQLi" mais ne fonctionne pas, donc j'ai fait ceci:

<?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);
?>

L'astuce consiste à désactiver le rapport d'erreur :)

# Turn off all error reporting
error_reporting(0);

Pour PHP 7+, vous pouvez utiliser ce code à la place:

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

Merci


1
Salut, Oui, pour PHP 7+, vous pouvez l'utiliser ini_set('display_errors', 0); ini_set('log_errors', 1);. Je mettrai à jour la réponse ci-dessus. Merci.
Mizo Games

-3

mettez ceci dans votre page php.

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

Notez qu'avec PHP 7+, cela ne fonctionnera plus (donc mon vote négatif); ce n'est pas une `` solution '' ...
Gwyneth Llewelyn

-5

Ajouter une @œuvre pour moi!

J'ai testé avec error_reporting(E_ALL ^ E_DEPRECATED);


1
Vous ne résolvez pas l'erreur, vous ne faites que cacher le message
Leonardo Sapuy

Notez qu'avec PHP 7+, cela ne fonctionnera plus (donc mon vote négatif); ce n'est pas une `` solution '' ...
Gwyneth Llewelyn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.