Przestarzałe: mysql_connect ()


97

Otrzymuję to ostrzeżenie, ale program nadal działa poprawnie.

Kod MySQL wyświetla mi wiadomość w PHP:

Przestarzałe: mysql_connect (): rozszerzenie mysql jest przestarzałe i zostanie usunięte w przyszłości: zamiast tego użyj mysqli lub PDO w C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php w linii 2

Moja connect.inc.phpstrona to

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

Co to oznacza i jak mogę usunąć ten komunikat?


5
Użyj funkcji mysqli_ * lub PDO !!!!
Krish R


3
Powiązana aktualizacja, funkcje mysql_ * zostały usunięte w PHP7. Zamiast tego użyj MySQLi.
techdude

Odpowiedzi:


143

Istnieje kilka rozwiązań Twojego problemu.

Sposób z MySQLi wyglądałby tak:

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

Uruchamianie zapytań do bazy danych jest również proste i prawie identyczne ze starym sposobem:

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

Wyłącz wszystkie przestarzałe ostrzeżenia, w tym je z mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

Dokładna lokalizacja pliku i wiersza, które należy zastąpić, to "/System/Startup.php> line: 2" error_reporting (E_All); zamień na error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

Możesz usunąć ostrzeżenie, dodając „@” przed mysql_connect.

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

ale jak mówi ostrzeżenie, użyj mysqli lub PDO, ponieważ rozszerzenie mysql zostanie usunięte w przyszłości.


1
Widzę, że nie tylko przy użyciu złych praktyk całą drogę sam, ale nawet mówienie do tego innych
zdrowego rozsądku

29
Ukrywanie ostrzeżenia jest DOBRE. Utrzymuje działanie programu, a funkcje mysql_xxxx nie stanowią teraz żadnego problemu, ponieważ działają dobrze w obecnej wersji. Wszystko, co mówisz o tym, że jest przestarzały, to CZĘŚĆ KOMUNIKATU O BŁĘDZIE, więc powtarzanie tego nie jest mądre. Każdy może zobaczyć, że jest przestarzały, tak, dziękuję, następny proszę. W przyszłości oczywiście wywołania funkcji mysql zostaną zastąpione. Do tego czasu ukrycie ostrzeżenia jest praktyczną radą, która pozwala witrynie działać, podczas gdy po cichu zastępujemy wywołania mysql_xxx czymś innym w tle. Nie bądź przesądny.
dkellner

5
Niezwykle pomocne komentarze. Zostawić przestarzałe ostrzeżenia w programie i złamać swój aktywny kod? Nieźle… Oczywiście ukrycie ostrzeżenia nie jest idealne, ale należy to zrobić, aby kod działał poprawnie. Dobry programista nadal będzie śledził przestarzały kod i planuje jego przyszłą aktualizację.
Sturrockad

1
tłumienie błędów / ostrzeżeń nie jest sposobem, w jaki to jest naprawiane - jeśli masz surowe ostrzeżenia / błędy wyświetlane użytkownikom na serwerze produkcyjnym, robisz to źle - jeśli masz tylko serwer produkcyjny i nie masz środowiska programistycznego do testowania, robisz to źle - jeśli nie naprawiasz błędów / ostrzeżeń w fazie rozwoju przed wydaniem do produkcji, robisz to źle
HorusKol

1
@sturrockad Dobry programista lepiej poradziłby sobie z błędami, więc nigdy nie wyciekają one do opinii publicznej i są logowane tylko na zapleczu, aby programiści mogli je zobaczyć. Jeśli nadal łamiesz kod na żywo, publikując komunikaty o błędach na wolności, prawdopodobnie powinieneś przemyśleć całą swoją witrynę. To nie jest dobra wymówka, by tłumić ostrzeżenia.
animuson

10

Aby pominąć komunikat o zaniechaniu tylko w tym celu (i być informowanym o innych wycofaniach w kodzie), możesz poprzedzić connect znakiem @:

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

Zauważ, że z PHP 7+ to już nie będzie działać (stąd mój głos przeciw); to nie jest „rozwiązanie” ...
Gwyneth Llewelyn

OP dotyczy komunikatu o zaniechaniu generowanego tylko przez PHP 5.5 i 5.6. Rozwiązanie znajduje się w środowisku, w którym wyświetlany jest komunikat OP.
IanMcL

8

Przestarzałe funkcje w PHP 5.5.x.

Oryginalne rozszerzenie MySQL jest teraz przestarzała i będzie generować E_DEPRECATEDbłędy podczas łączenia się z bazą danych. Zamiast tego użyj ** MYSQLi lub PDO_MySQL . **

Składnia:

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

Ponadto zamień wszystkie mysql_*funkcje na mysqli_*funkcje

zamiast

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

6

To ostrzeżenie jest wyświetlane, ponieważ pojawiło się nowe rozszerzenie. Przypuszcza się, że nadal możesz używać starego, ale w niektórych przypadkach jest to niemożliwe.

Pokażę ci jak robię połączenie z bazą danych. Wystarczy zmienić wartości zmiennych.

Mój plik połączenia : 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);
?>

Rozszerzenie zmienia się również podczas wykonywania zapytania.

Plik zapytania: „przyklad.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");    
?>

W ten sposób używa się ulepszonego rozszerzenia MySQL , ale możesz użyć PDO (PHP Data Objects) .

Pierwsza metoda może być używana tylko z bazami danych MySQL, ale PDO może zarządzać różnymi typami baz danych.

Podam przykład, ale muszę powiedzieć, że używam tylko pierwszego, więc proszę, popraw mnie, jeśli jest jakiś błąd.

Mój plik połączenia 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);
?>

Plik zapytania (PDO): „example.php”

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

Na koniec powiedz tylko, że oczywiście możesz ukryć ostrzeżenie, ale nie jest to dobry pomysł, ponieważ może pomóc Ci zaoszczędzić czas w przyszłości, jeśli wystąpi błąd (wszyscy znamy teorię, ale jeśli czasami pracujesz dużo godzin ... . mózg nie istnieje ^^).


4

Dzieje się tak, ponieważ używasz PHP 5.5 lub serwer WWW zostałby zaktualizowany do wersji 5.5.0.

Te mysql_*funkcje został wycofany z 5.5.0

wprowadź opis obrazu tutaj

Source




1

Ostrzeżenie „przestarzałe” ogólnie oznacza, że ​​próbujesz użyć funkcji, która jest nieaktualna. Nie oznacza to, że twój kod nie zadziała, ale powinieneś rozważyć jego refaktoryzację.

W twoim przypadku funkcje mysql_ są przestarzałe. Jeśli chcesz dowiedzieć się więcej na ten temat, oto dobre wyjaśnienie: Dlaczego nie powinienem używać funkcji mysql_ * w PHP?


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

To rozwiąże twój problem.


1

Klasa PDO zastępuje te metody. Przykład dla Mysql lub 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
                ));

Źródło: Klasa PDO


1

Jeśli skończyłeś już kodowanie

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

to dobra opcja, ale jeśli dopiero zaczynasz, zdecydowanie powinieneś użyć mysqli.


1

Cóż, właśnie spotkałem się z taką wiadomością dzisiaj, kiedy przeniosłem się na nowy hosting! w każdym razie próbowałem zmienić „mySQL” na „mySQLi”, ale nie działa, więc zrobiłem to:

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

Rzecz w tym, aby wyłączyć raportowanie błędów :)

# Turn off all error reporting
error_reporting(0);

W przypadku PHP 7+ możesz użyć tego kodu:

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

Dzięki


1
Cześć, tak, dla PHP 7+ możesz tego użyć ini_set('display_errors', 0); ini_set('log_errors', 1);. Zaktualizuję powyższą odpowiedź. Dzięki.
Mizo Games

-3

umieść to na swojej stronie php.

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

Zauważ, że z PHP 7+ to już nie będzie działać (stąd mój głos przeciw); to nie jest „rozwiązanie” ...
Gwyneth Llewelyn

-5

Dodawanie @prac dla mnie!

Testowałem z error_reporting(E_ALL ^ E_DEPRECATED);


1
Nie rozwiązujesz błędu, tylko ukrywasz wiadomość
Leonardo Sapuy

Zauważ, że z PHP 7+ to już nie będzie działać (stąd mój głos przeciw); to nie jest „rozwiązanie” ...
Gwyneth Llewelyn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.