Не рекомендуется: mysql_connect ()


97

Я получаю это предупреждение, но программа по-прежнему работает правильно.

Код MySQL показывает мне сообщение на PHP:

Устарело: mysql_connect (): расширение mysql устарело и будет удалено в будущем: используйте вместо него mysqli или PDO в C: \ xampp \ htdocs \ task \ media \ new \ connect.inc.php в строке 2

Моя connect.inc.phpстраница

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

Что это означает и как я могу избавиться от сообщения?


5
Используйте функции mysqli_ * или PDO !!!!
Krish R

Возможный дубликат. stackoverflow.com/questions/13944956/…
desbest

3
Связанное обновление, функции mysql_ * были удалены в PHP7. Вместо этого используйте MySQLi.
techdude

Ответы:


144

Есть несколько вариантов решения вашей проблемы.

Путь с MySQLi будет таким:

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

Запускать запросы к базе данных также просто и почти идентично старому способу:

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

Отключите все устаревшие предупреждения, включая их из mysql_ *:

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

Точное расположение файла и строки, которое необходимо заменить: "/System/Startup.php> line: 2" error_reporting (E_All); заменить на error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

Вы можете удалить предупреждение, добавив '@' перед mysql_connect.

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

но, как сказано в предупреждении, используйте mysqli или PDO, поскольку расширение mysql будет удалено в будущем.


1
Я вижу, что вы не только сами используете плохие методы, но и даже говорите это другим
Your Common Sense

29
Скрыть предупреждение - ХОРОШО. Это поддерживает работу программы, и функции mysql_xxxx не означают сейчас никаких проблем, поскольку они хорошо работают в текущей версии. Все, что вы говорите о том, что он устарел, - это ЧАСТЬ СООБЩЕНИЯ ОБ ОШИБКЕ, поэтому повторять это неразумно. Все видят, что он устарел, да, спасибо, пожалуйста. В будущем вызовы функций mysql, очевидно, будут заменены. А пока скрытие предупреждения - это практический совет, позволяющий сайту работать, пока мы молча заменяем вызовы mysql_xxx чем-то еще в фоновом режиме. Не будьте суеверны.
dkellner

5
Невероятно полезные комментарии здесь .. Оставить устаревшие предупреждения и сломать ваш живой код? Приятно .. Конечно, скрытие предупреждения - не лучший вариант, но его все же нужно делать, чтобы код оставался в рабочем состоянии. Хороший разработчик по-прежнему будет отслеживать устаревший код и планировать его для будущего обновления.
sturrockad

1
Подавление ошибок / предупреждений - это не то, как это исправить - если у вас есть необработанные предупреждения / ошибки, представляемые пользователям на вашем производственном сервере, вы делаете это неправильно - если у вас есть только производственный сервер и нет среды разработки для тестирования, вы Вы делаете это неправильно - если вы не исправляете ошибки / предупреждения при разработке перед выпуском в производство, вы делаете это неправильно
HorusKol

1
@sturrockad Хороший разработчик лучше справился бы с ошибками, чтобы они никогда не попадали в открытый доступ, а регистрировались только в серверной части, чтобы разработчики могли их видеть. Если вы все еще нарушаете действующий код, публикуя сообщения об ошибках, вам, вероятно, следует переосмыслить весь свой веб-сайт. Это не повод для подавления предупреждений.
animuson

10

Чтобы подавить сообщение об устаревании только для этого (и быть в курсе других устаревших рекомендаций в вашем коде), вы можете префикс подключения с помощью @:

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

Обратите внимание, что с PHP 7+ это больше не будет работать (отсюда и мой голос против); это не «решение» ...
Гвинет Ллевелин

OP - это сообщение об устаревании, генерируемое только PHP 5.5 и 5.6. Решение находится в среде, в которой отображается сообщение OP.
IanMcL

8

Устаревшие функции в PHP 5.5.x

Оригинальное расширение MySQL теперь осуждается, и будет генерировать E_DEPRECATEDошибки при подключении к базе данных. Вместо этого используйте расширения ** MYSQLi или PDO_MySQL . **

Синтаксис:

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

Также замените все mysql_*функции на mysqli_*функции

вместо того

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

6

Это предупреждение отображается, потому что появилось новое расширение. Предполагается, что вы все еще можете использовать старую, но в некоторых случаях это невозможно.

Я покажу вам, как я устанавливаю соединение с базой данных. Вам нужно просто изменить значения переменных.

Мой файл подключения : 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);
?>

Расширение также изменяется при выполнении запроса.

Файл запроса: "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");    
?>

В этом способе используется улучшенное расширение MySQL , но вы можете использовать PDO (объекты данных PHP) .

Первый метод может использоваться только с базами данных MySQL, но PDO может управлять разными типами баз данных.

Я собираюсь привести пример, но необходимо сказать, что я использую только первый, поэтому, пожалуйста, поправьте меня, если есть какая-либо ошибка.

Мой файл подключения 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);
?>

Файл запроса (PDO): "example.php"

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

В заключение просто скажите, что, конечно, вы можете скрыть предупреждение, но это не очень хорошая идея, потому что это может помочь вам в будущем сэкономить время, если произойдет ошибка (все мы знаем теорию, но если вы иногда работаете много часов ... .мозгов там нет ^^).





1

Предупреждение "устаревшее" в целом означает, что вы пытаетесь использовать устаревшую функцию. Это не означает, что ваш код не будет работать, но вам следует подумать о рефакторинге.

В вашем случае функции mysql_ устарели. Если вы хотите узнать больше об этом, вот хорошее объяснение: почему бы мне не использовать функции mysql_ * в PHP?


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

Это решит вашу проблему.


1

Класс PDO заменяет эти методы. Пример для Mysql или 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
                ));

Источник: PDO Class


1

Если вы написали код, то

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

Это хороший вариант, но если вы только начинаете, вам определенно стоит использовать mysqli.


1

Я столкнулся с таким сообщением сегодня, когда переехал на новый хостинг! в любом случае я попытался изменить «mySQL» на «mySQLi», но не работал, поэтому я сделал это:

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

Хитрость в том, чтобы отключить отчеты об ошибках :)

# Turn off all error reporting
error_reporting(0);

Для PHP 7+ вместо этого можно использовать этот код:

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

Благодарность


1
Привет, да, для PHP 7+ вы можете использовать это ini_set('display_errors', 0); ini_set('log_errors', 1);. Я обновлю ответ выше. Спасибо.
Games,

-3

поместите это на свою страницу php.

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

Обратите внимание, что с PHP 7+ это больше не будет работать (отсюда и мой голос против); это не «решение» ...
Гвинет Ллевелин

-5

Добавление @работает для меня!

Я тестировал с error_reporting(E_ALL ^ E_DEPRECATED);


1
Вы не
решаете

Обратите внимание, что с PHP 7+ это больше не будет работать (отсюда и мой голос против); это не «решение» ...
Гвинет Ллевелин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.