Deprecato: mysql_connect ()


95

Ricevo questo avviso, ma il programma continua a funzionare correttamente.

Il codice MySQL mi mostra un messaggio in PHP:

Deprecato: mysql_connect (): l'estensione mysql è deprecata e verrà rimossa in futuro: usa mysqli o PDO invece in C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php sulla riga 2

La mia connect.inc.phppagina è

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

Cosa significa e come posso eliminare il messaggio?


5
Usa le funzioni mysqli_ * o PDO !!!!
Krish R


3
Aggiornamento correlato, le funzioni mysql_ * sono state rimosse in PHP7. Usa invece MySQLi.
techdude

Risposte:


141

Ci sono alcune soluzioni al tuo problema.

Il modo con MySQLi sarebbe questo:

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

Anche eseguire query sul database è semplice e quasi identico al vecchio modo:

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

Disattiva tutti gli avvisi deprecati, inclusi quelli da mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

Il percorso esatto del file e della riga che deve essere sostituito è "/System/Startup.php> riga: 2" error_reporting (E_All); sostituire con error_reporting (E_ALL ^ ​​E_DEPRECATED);


33

Puoi rimuovere l'avviso aggiungendo un "@" prima di mysql_connect.

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

ma come ti dice l'avviso, usa mysqli o PDO poiché l'estensione mysql verrà rimossa in futuro.


1
Vedo che non stai solo usando cattive pratiche fino in fondo, ma anche dicendo agli altri di farlo
Il tuo buon senso

29
Nascondere l'avvertimento è una BUONA COSA. Mantiene attivo il programma e le funzioni mysql_xxxx non significano alcun problema in questo momento poiché funzionano bene nella versione corrente. Tutto quello che stai dicendo sul fatto che è deprecato è PARTE DEL MESSAGGIO DI ERRORE, quindi non è una cosa saggia da ripetere. Tutti possono vedere che è deprecato, sì, grazie, il prossimo per favore. In futuro, le chiamate alla funzione mysql verranno ovviamente sostituite. Fino ad allora, nascondere l'avviso è un consiglio pratico per consentire al sito di funzionare mentre stiamo silenziosamente sostituendo le chiamate mysql_xxx con qualcos'altro in background. Non essere superstizioso.
dkellner

5
Commenti incredibilmente utili qui .. Lasciare avvisi deprecati e violare il codice live? Bello .. Ovviamente nascondere l'avviso non è l'ideale, ma dovrebbe comunque essere fatto per mantenere il codice in ordine. Un buon sviluppatore terrà comunque traccia del codice obsoleto e lo pianificherà per un aggiornamento futuro.
sturrockad

1
la soppressione di errori / avvisi non è il modo in cui viene risolto: se si presentano avvisi / errori non elaborati agli utenti sul server di produzione, lo stai facendo in modo sbagliato - se hai solo un server di produzione e nessun ambiente di sviluppo per il test, tu ' lo stai facendo in modo sbagliato - se non stai correggendo errori / avvisi in fase di sviluppo prima di rilasciarlo in produzione, lo stai facendo in modo
sbagliato

1
@sturrockad Un buon sviluppatore avrebbe gestito meglio gli errori in modo che non trapelassero mai al pubblico e venissero registrati solo nel back-end per gli sviluppatori. Se stai ancora violando il codice live rilasciando messaggi di errore in circolazione, probabilmente dovresti ripensare all'intero sito web. Non è una scusa valida per sopprimere gli avvisi.
animuson

10

Per sopprimere il messaggio di deprecazione solo per questo (e rimanere informato su altre deprecazioni nel codice) è possibile anteporre al collegamento @:

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

Nota che con PHP 7+ questo non funzionerà più (quindi il mio downvote); non è una 'soluzione' ...
Gwyneth Llewelyn

OP riguarda un messaggio di deprecazione generato solo da PHP 5.5 e 5.6. La soluzione si trova all'interno dell'ambiente in cui viene mostrato il messaggio OP.
IanMcL

8

Funzionalità deprecate in PHP 5.5.x

L' estensione MySQL originale è ora deprecata e genererà E_DEPRECATEDerrori durante la connessione a un database. Utilizza invece le ** estensioni MYSQLi o PDO_MySQL . **

Sintassi:

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

Inoltre, sostituisci tutte le mysql_*funzioni in mysqli_*funzioni

invece di

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

6

Questo avviso viene visualizzato perché è apparsa una nuova estensione. Supponiamo che tu possa ancora usare quello vecchio ma in alcuni casi è impossibile.

Ti mostro come faccio il collegamento con il database. Hai solo bisogno di cambiare i valori delle variabili.

Il mio file di connessione : 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);
?>

Anche l'estensione cambia quando si esegue una query.

File di query: "esempio.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");    
?>

In questo modo si utilizza MySQL Improved Extension , ma è possibile utilizzare PDO (PHP Data Objects) .

Il primo metodo può essere utilizzato solo con i database MySQL, ma PDO può gestire diversi tipi di database.

Farò un esempio, ma è necessario dire che uso solo il primo, quindi correggimi se c'è qualche errore.

Il mio file di connessione 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);
?>

File di query (PDO): "example.php"

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

Per finire dì solo che ovviamente puoi nascondere l'avviso ma non è una buona idea perché in futuro può aiutarti a risparmiare tempo se si verifica un errore (tutti noi conosciamo la teoria ma se lavori molte ore a volte .. .il cervello non c'è ^^).


4

Questo perché stai usando PHP 5.5 o il tuo server web sarebbe stato aggiornato a 5.5.0.

Le mysql_*funzioni sono state deprecate dalla 5.5.0

inserisci qui la descrizione dell'immagine

Source




1

L'avviso "deprecato" in generale significa che stai tentando di utilizzare una funzione che non è aggiornata. Non significa che il tuo codice non funzionerà, ma dovresti considerare il refactoring.

Nel tuo caso le funzioni mysql_ sono deprecate. Se vuoi saperne di più, ecco già una buona spiegazione: Perché non dovrei usare le funzioni mysql_ * in PHP?


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

Questo risolverà il tuo problema.


1

La classe PDO sostituisce questi metodi. Esempio per Mysql o 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
                ));

Fonte: Classe DOP


1

Se hai fatto la tua codifica allora

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

è una buona opzione, ma se sei all'inizio, dovresti assolutamente usare mysqli.


1

Bene, ho appena affrontato questo messaggio oggi quando sono passato al nuovo hosting! comunque ho provato a cambiare "mySQL" in "mySQLi" ma non funziona, quindi ho fatto questo:

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

Il trucco è disattivare la segnalazione degli errori :)

# Turn off all error reporting
error_reporting(0);

Per PHP 7+ puoi invece usare questo codice:

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

Grazie


1
Ciao, sì, per PHP 7+ puoi usarlo ini_set('display_errors', 0); ini_set('log_errors', 1);. Aggiornerò la risposta sopra. Grazie.
Mizo Games,

-3

mettilo nella tua pagina php.

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

Nota che con PHP 7+ questo non funzionerà più (quindi il mio downvote); non è una 'soluzione' ...
Gwyneth Llewelyn

-5

Aggiunta di @opere per me!

Ho provato con error_reporting(E_ALL ^ E_DEPRECATED);


1
Non stai risolvendo l'errore, stai solo nascondendo il messaggio
Leonardo Sapuy

Nota che con PHP 7+ questo non funzionerà più (quindi il mio downvote); non è una 'soluzione' ...
Gwyneth Llewelyn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.