Застаріле: mysql_connect ()


95

Я отримую це попередження, але програма все одно працює коректно.

Код 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

Відповіді:


142

Є кілька варіантів вирішення вашої проблеми.

Шлях із 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> рядок: 2" повідомлення про помилку (E_All); замінити на повідомлення про помилку (E_ALL ^ ​​E_DEPRECATED);


34

Ви можете видалити попередження, додавши "@" перед mysql_connect.

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

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


1
Я бачу, що ти не тільки сам використовуєш погані практики, але навіть кажеш іншим це робити
твій здоровий глузд

29
Приховування попередження - ДОБРА РЕЧЬ. Це підтримує роботу програми, і функції mysql_xxxx зараз не означають проблем, оскільки вони працюють добре в поточній версії. Все, що ви говорите про те, що його застаріло, - це ЧАСТИНА ПОВІДОМЛЕННЯ ПРО ПОМИЛКУ, тому повторювати це не розумно. Кожен може побачити, що його застаріло, так, дякую, далі, будь ласка. У майбутньому виклики функції mysql, очевидно, будуть замінені. До цього моменту приховування попередження є практичною порадою, щоб дозволити сайту працювати, поки ми мовчки замінюємо виклики mysql_xxx чимось іншим у фоновому режимі. Не будь забобонним.
dkellner

5
Тут неймовірно корисні коментарі .. Залишити застарілі попередження та зламати свій живий код? Приємно .. Звичайно, приховувати попередження не є ідеальним, але це все одно слід робити, щоб підтримувати код у робочому стані. Хороший розробник все одно буде відстежувати застарілий код і планувати його для майбутнього оновлення.
sturrockad

1
придушення помилок / попереджень - це не те, як це виправлено - якщо у вас є необроблені попередження / помилки, що відображаються користувачам на вашому виробничому сервері, ви робите це неправильно - якщо у вас є лише робочий сервер і немає середовища розробки для тестування, ви ' робиш це гнівніше - якщо ти не виправляєш помилки / попередження в розробці перед виходом у виробництво, ти робиш це найскладніше
HorusKol

1
@sturrockad Хороший розробник краще обробляв би помилки, тому вони ніколи не просочуються в загальнодоступне, а реєструються лише у фоновому режимі, щоб їх могли бачити розробники. Якщо ви все ще ламаєте живий код, випускаючи повідомлення про помилки в дику природу, вам, мабуть, слід переглянути свою веб-сторінку. Це не дійсний привід для придушення попереджень.
анімусон

10

Щоб придушити повідомлення про припинення використання лише для цього (і бути в курсі інших припинень у вашому коді), можна додати префікс connect до @:

<?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 Data Objects) .

Перший метод можна використовувати лише з базами даних 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;
?>

На закінчення просто скажіть, що, звичайно, ви можете приховати попередження, але це не дуже гарно, оскільки це може допомогти вам в майбутньому заощадити час, якщо трапиться помилка (всі ми знаємо теорію, але якщо ви іноді працюєте багато годин .. мозку там немає ^^).


4

Це тому, що ви використовуєте PHP 5.5, інакше ваш веб-сервер був би оновлений до 5.5.0.

Ці mysql_*функції були застарілі 5.5.0

введіть тут опис зображення

Source




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


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);. Я оновлю відповідь вище. Дякую.
Mizo 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.