En desuso: mysql_connect ()

95

Recibo esta advertencia, pero el programa aún se ejecuta correctamente.

El código MySQL me muestra un mensaje en PHP:

En desuso: mysql_connect (): la extensión de mysql está en desuso y se eliminará en el futuro: use mysqli o PDO en su lugar en C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php en la línea 2

Mi connect.inc.phppagina es

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

¿Qué significa esto y cómo puedo eliminar el mensaje?

Mubashar Ahmed Hassan
fuente
5
Utilice las funciones mysqli_ * o PDO !!!!
Krish R
Posible duplicado. stackoverflow.com/questions/13944956/…
desbest
3
Actualización relacionada, las funciones mysql_ * se han eliminado en PHP7. En su lugar, utilice MySQLi.
techdude

Respuestas:

142

Hay algunas soluciones a su problema.

El camino con MySQLi sería así:

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

Ejecutar consultas de base de datos también es simple y casi idéntico a la forma anterior:

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

Desactive todas las advertencias obsoletas, incluidas las de mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

La ubicación exacta del archivo y la línea que debe reemplazarse es "/System/Startup.php> line: 2" error_reporting (E_All); reemplazar con error_reporting (E_ALL ^ ​​E_DEPRECATED);

Tharindu Kumara
fuente
34

Puede eliminar la advertencia agregando una '@' antes de mysql_connect.

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

pero como le indica la advertencia, use mysqli o PDO ya que la extensión mysql se eliminará en el futuro.

Renacimiento
fuente
1
Veo que no solo estás usando malas prácticas tú mismo, sino que incluso dices a los demás que lo hagan
su sentido común
29
Ocultar la advertencia es algo BUENO. Mantiene el programa en funcionamiento, y las funciones mysql_xxxx no significan ningún problema en este momento, ya que funcionan bien en la versión actual. Todo lo que está diciendo sobre su desaprobación es PARTE DEL MENSAJE DE ERROR, por lo que no es prudente repetirlo. Todo el mundo puede ver que está obsoleto, sí, gracias, a continuación, por favor. En el futuro, las llamadas a funciones de mysql obviamente serán reemplazadas. Hasta entonces, ocultar la advertencia es un consejo práctico para permitir que el sitio funcione mientras reemplazamos silenciosamente las llamadas mysql_xxx con algo más en segundo plano. No seas supersticioso.
dkellner
5
Comentarios increíblemente útiles aquí ... ¿Dejar advertencias obsoletas y romper su código en vivo? Bien ... Por supuesto, ocultar la advertencia no es lo ideal, pero aún así debería hacerse para mantener el código en funcionamiento. Un buen desarrollador seguirá realizando un seguimiento del código obsoleto y lo programará para una actualización futura.
sturrockad
1
la supresión de errores / advertencias no es la forma en que se corrige esto: si tiene advertencias / errores sin procesar que se presentan a los usuarios en su servidor de producción, lo está haciendo mal, si solo tiene un servidor de producción y no un entorno de desarrollo para probar, usted ' lo está haciendo mal: si no está corrigiendo errores / advertencias en desarrollo antes de lanzarlo a producción, lo está haciendo más mal
HorusKol
1
@sturrockad Un buen desarrollador habría manejado mejor los errores para que nunca se filtraran al público y solo se registran en el back-end para que los desarrolladores los vean. Si todavía está rompiendo el código en vivo al publicar mensajes de error, probablemente debería reconsiderar todo su sitio web. Esa no es una excusa válida para suprimir las advertencias.
animuson
10

Para suprimir el mensaje de desactivación solo para esto (y mantenerse informado de otras desactivaciones en su código), puede prefijar la conexión con @:

<?php
$connect = @mysql_connect('localhost','root','');
mysql_select_db('dbname');
?> 
IanMcL
fuente
Tenga en cuenta que con PHP 7+ esto ya no funcionará (de ahí mi voto negativo); no es una 'solución' ...
Gwyneth Llewelyn
OP se trata de un mensaje de obsolescencia generado solo por PHP 5.5 y 5.6. La solución se encuentra dentro del entorno en el que se muestra el mensaje OP.
IanMcL
8

Funciones obsoletas en PHP 5.5.x

La extensión MySQL original ahora está en desuso y generará E_DEPRECATEDerrores al conectarse a una base de datos. En su lugar, use las extensiones ** MYSQLi o PDO_MySQL . **

Sintaxis:

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

Además, reemplace todas las mysql_*funciones en mysqli_*funciones

en vez de

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

Esta advertencia se muestra porque ha aparecido una nueva extensión. Suponga que todavía se puede utilizar el antiguo pero en algunos casos es imposible.

Te muestro cómo hago la conexión con la base de datos. Solo necesita cambiar los valores de las variables.

Mi archivo de conexión : 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);
?>

La extensión también cambia al realizar una consulta.

Archivo de consulta: "ejemplo.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");    
?>

De esta manera se usa MySQL Improved Extension , pero puede usar PDO (PHP Data Objects) .

El primer método solo se puede usar con bases de datos MySQL, pero PDO puede administrar diferentes tipos de bases de datos.

Voy a poner un ejemplo pero es necesario decir que solo uso el primero, así que corrígeme si hay algún error.

Mi archivo de conexión 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);
?>

Archivo de consulta (PDO): "ejemplo.php"

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

Para terminar solo di que por supuesto puedes ocultar la advertencia pero no es una buena idea porque puede ayudarte en el futuro a ahorrar tiempo si ocurre un error (todos conocemos la teoría pero si trabajas muchas horas a veces ... .El cerebro no está allí ^^).

jCastellote
fuente
4

Esto se debe a que está utilizando PHP 5.5 o su servidor web se habría actualizado a 5.5.0.

Las mysql_*funciones han quedado obsoletas a partir de 5.5.0

ingrese la descripción de la imagen aquí

Source

Shankar Damodaran
fuente
1

La advertencia "obsoleta" en general significa que está intentando utilizar una función que no está actualizada. No significa que su código no funcione, pero debería considerar la refactorización.

En su caso, las funciones mysql_ están obsoletas. Si quieres saber más sobre eso, aquí tienes una buena explicación: ¿Por qué no debería usar las funciones mysql_ * en PHP?

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

Esto resolverá su problema.

zubair1024
fuente
1

La clase PDO reemplaza estos métodos. Ejemplo para 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
                ));

Fuente: Clase PDO

Karima Rafes
fuente
1

Si ha hecho su codificación,

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

es una buena opción, pero si está comenzando, definitivamente debería usar mysqli.

Manoj Sharma
fuente
1

Bueno, ¡acabo de enfrentar ese mensaje hoy cuando me mudé a un nuevo alojamiento! de todos modos he intentado cambiar el "mySQL" a "mySQLi" pero no funciona, así que he hecho esto:

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

El truco consiste en desactivar los informes de errores :)

# Turn off all error reporting
error_reporting(0);

Para PHP 7+, puede usar este código en su lugar:

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

Gracias

Juegos de Mizo
fuente
1
Hola, Sí, para PHP 7+ puedes usar esto ini_set('display_errors', 0); ini_set('log_errors', 1);. Actualizaré la respuesta anterior. Gracias.
Mizo Games
-3

pon esto en tu página php.

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 
Shan
fuente
Tenga en cuenta que con PHP 7+ esto ya no funcionará (de ahí mi voto negativo); no es una 'solución' ...
Gwyneth Llewelyn
-5

¡Añadiendo un @trabajo para mí!

Probé con error_reporting(E_ALL ^ E_DEPRECATED);

Sici
fuente
1
No estás resolviendo el error, solo estás ocultando el mensaje
Leonardo Sapuy
Tenga en cuenta que con PHP 7+ esto ya no funcionará (de ahí mi voto negativo); no es una 'solución' ...
Gwyneth Llewelyn