Obsoleto: mysql_connect ()

95

Estou recebendo este aviso, mas o programa ainda funciona corretamente.

O código MySQL está me mostrando uma mensagem em PHP:

Obsoleto: mysql_connect (): A extensão mysql está obsoleta e será removida no futuro: use mysqli ou PDO em vez de C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php na linha 2

Minha connect.inc.phppagina é

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

O que isso significa e como posso eliminar a mensagem?

Mubashar Ahmed Hassan
fonte
5
Use funções mysqli_ * ou PDO !!!!
Krish R de
Possível duplicata. stackoverflow.com/questions/13944956/…
desbest
3
Atualização relacionada, as funções mysql_ * foram removidas do PHP7. Em vez disso, use o MySQLi.
techdude

Respostas:

141

Existem algumas soluções para o seu problema.

O jeito com o MySQLi seria assim:

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

Executar consultas de banco de dados também é simples e quase idêntico ao método antigo:

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

Desative todos os avisos obsoletos, incluindo-os de mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

O arquivo exato e a localização da linha que precisa ser substituída é "/System/Startup.php> line: 2" error_reporting (E_All); substitua por error_reporting (E_ALL ^ ​​E_DEPRECATED);

Tharindu Kumara
fonte
33

Você pode remover o aviso adicionando um '@' antes de mysql_connect.

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

mas, como o aviso está dizendo, use mysqli ou PDO, pois a extensão mysql será removida no futuro.

Renascimento
fonte
1
Vejo que você não está apenas usando más práticas até o fim, mas até mesmo dizendo aos outros para fazerem isso
Seu bom senso
29
Esconder o aviso é uma COISA BOA. Isso mantém o programa funcionando, e as funções mysql_xxxx não significam nenhum problema agora, pois funcionam bem na versão atual. Tudo o que você está dizendo sobre ele estar obsoleto é PARTE DA MENSAGEM DE ERRO, então não é uma coisa sábia repetir. Todos podem ver que está obsoleto, sim, obrigado, próximo por favor. No futuro, as chamadas de função mysql obviamente serão substituídas. Até então, ocultar o aviso é um conselho prático para permitir que o site opere enquanto substituímos silenciosamente as chamadas mysql_xxx por alguma outra coisa em segundo plano. Não seja supersticioso.
dkellner
5
Comentários incrivelmente úteis aqui .. Deixar avisos obsoletos e quebrar seu código ativo? Legal ... É claro que ocultar o aviso não é o ideal, mas ainda assim deve ser feito para manter o código funcionando. Um bom desenvolvedor ainda manterá o controle do código obsoleto e o agendará para uma atualização futura.
sturrockad
1
a supressão de erros / avisos não é como isso é corrigido - se você tiver avisos / erros brutos sendo apresentados aos usuários em seu servidor de produção, você está fazendo isso errado - se você tiver apenas um servidor de produção e nenhum ambiente de desenvolvimento para teste, você ' está fazendo da maneira errada - se você não está corrigindo erros / avisos no desenvolvimento antes de liberar para produção, você está fazendo da forma errada
HorusKol
1
@sturrockad Um bom desenvolvedor teria lidado melhor com os erros, de forma que eles nunca vazassem para o público e apenas fossem registrados no back-end para que os desenvolvedores os vissem. Se você ainda está quebrando o código ativo ao liberar mensagens de erro, provavelmente deve repensar todo o seu site. Essa não é uma desculpa válida para suprimir avisos.
animuson
10

Para suprimir a mensagem de descontinuação apenas para isso (e se manter informado sobre outras descontinuações em seu código), você pode prefixar a conexão com @:

<?php
$connect = @mysql_connect('localhost','root','');
mysql_select_db('dbname');
?> 
IanMcL
fonte
Observe que com o PHP 7 + isso não funcionará mais (portanto, meu downvote); não é uma 'solução' ...
Gwyneth Llewelyn
OP é sobre uma mensagem de reprovação gerada apenas pelo PHP 5.5 e 5.6. A solução está dentro do ambiente em que a mensagem OP é exibida.
IanMcL
8

Recursos obsoletos no PHP 5.5.x

A extensão MySQL original agora está obsoleta e gerará E_DEPRECATEDerros ao conectar-se a um banco de dados. Em vez disso, use as extensões ** MYSQLi ou PDO_MySQL . **

Sintaxe:

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

Além disso, substitua todas as mysql_*funções em mysqli_*funções

ao invés de

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

Este aviso é exibido porque uma nova extensão apareceu. Supõe-se que você ainda possa usar o antigo, mas em alguns casos é impossível.

Mostro como faço a conexão com banco de dados. Você só precisa alterar os valores das variáveis.

Meu arquivo de conexão : 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);
?>

A extensão também muda ao realizar uma consulta.

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

Desta forma, é usando MySQL Improved Extension , mas você pode usar PDO (PHP Data Objects) .

O primeiro método pode ser usado apenas com bancos de dados MySQL, mas o PDO pode gerenciar diferentes tipos de bancos de dados.

Vou colocar um exemplo mas é necessário dizer que só utilizo o primeiro, por isso corrija-me se houver algum erro.

Meu arquivo de conexão 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);
?>

Arquivo de consulta (PDO): "exemplo.php"

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

Para finalizar é só dizer que é claro que você pode esconder o aviso, mas não é uma boa ideia porque pode te ajudar no futuro a economizar tempo se um erro acontecer (todos nós conhecemos a teoria, mas se você trabalhar muitas horas às vezes .. . cérebro não está lá ^^).

jCastellote
fonte
4

Isso é porque você está usando PHP 5.5 ou seu servidor web teria sido atualizado para 5.5.0.

As mysql_*funções foram descontinuadas a partir de 5.5.0

insira a descrição da imagem aqui

Source

Shankar Damodaran
fonte
1

Aviso "obsoleto" em geral significa que você está tentando usar uma função que está desatualizada. Isso não significa que seu código não funcionará, mas você deve considerar a refatoração.

No seu caso, as funções mysql_ estão obsoletas. Se você quiser saber mais sobre isso, aqui está uma boa explicação: Por que não devo usar as funções mysql_ * em PHP?

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

Isto irá resolver o seu problema.

zubair1024
fonte
1

A classe PDO substitui esses métodos. Exemplo para 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
                ));

Fonte: Classe PDO

Karima Rafes
fonte
1

Se você fez sua codificação, então

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

é uma boa opção, mas se você está começando, então definitivamente você deve usar mysqli.

Manoj Sharma
fonte
1

Bem, acabei de enfrentar essa mensagem hoje quando mudei para uma nova hospedagem! de qualquer forma, tentei alterar o "mySQL" para "mySQLi", mas não estava funcionando, então fiz o seguinte:

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

O truque é definir o relatório de erros :)

# Turn off all error reporting
error_reporting(0);

Para PHP 7, você pode usar este código:

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

obrigado

Jogos Mizo
fonte
1
Olá, sim, para PHP 7 ou superior, você pode usar isso ini_set('display_errors', 0); ini_set('log_errors', 1);. Vou atualizar a resposta acima. Obrigado.
Mizo Games
-3

coloque isso em sua página php.

ini_set("error_reporting", E_ALL & ~E_DEPRECATED); 
Shan
fonte
Observe que com o PHP 7 + isso não funcionará mais (portanto, meu downvote); não é uma 'solução' ...
Gwyneth Llewelyn
-5

Adicionando um @ trabalho para mim!

Eu testei com error_reporting(E_ALL ^ E_DEPRECATED);

Sici
fonte
1
Você não está resolvendo o erro, está apenas escondendo a mensagem
Leonardo Sapuy
Observe que com o PHP 7 + isso não funcionará mais (portanto, meu downvote); não é uma 'solução' ...
Gwyneth Llewelyn