더 이상 사용되지 않음 : mysql_connect ()


95

이 경고가 표시되지만 프로그램은 여전히 ​​올바르게 실행됩니다.

MySQL 코드는 PHP에서 메시지를 표시합니다.

더 이상 사용되지 않음 : mysql_connect () : mysql 확장은 더 이상 사용되지 않으며 향후 제거 될 예정입니다. 2 행의 C : \ xampp \ htdocs \ task \ media \ new \ connect.inc.php 대신 mysqli 또는 PDO를 사용하십시오.

connect.inc.php페이지는

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

이것은 무엇을 의미하며 어떻게 메시지를 제거 할 수 있습니까?


5
mysqli_ * 함수 또는 PDO 사용 !!!!
Krish R


3
관련 업데이트, mysql_ * 함수는 PHP7에서 제거되었습니다. 대신 MySQLi를 사용하십시오.
techdude dec.

답변:


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> line : 2"입니다. error_reporting (E_All); error_reporting (E_ALL ^ ​​E_DEPRECATED);


34

mysql_connect 앞에 '@'를 추가하여 경고를 제거 할 수 있습니다.

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

그러나 경고에서 알 수 있듯이 mysql 확장은 향후 제거 될 예정이므로 mysqli 또는 PDO를 사용하십시오.


1
난 당신이 유일한 방법 모두 자신을 나쁜 관행을 사용하지만, 심지어 그렇게 다른 사람을 이야기하지 않을 참조
당신의 상식

29
경고를 숨기는 것은 좋은 일입니다. 그것은 프로그램을 계속 진행시키고 mysql_xxxx 함수는 현재 버전에서 잘 작동하기 때문에 지금 당장 문제가 없음을 의미합니다. 더 이상 사용되지 않는 것에 대해 말하는 것은 오류 메시지의 일부이므로 반복하는 것이 현명하지 않습니다. 모두가 더 이상 사용되지 않음을 알 수 있습니다. 예, 감사합니다. 다음으로 부탁드립니다. 앞으로 mysql 함수 호출은 분명히 대체 될 것입니다. 그때까지 경고를 숨기는 것은 mysql_xxx 호출을 백그라운드에서 다른 것으로 조용히 대체하는 동안 사이트가 작동하도록 허용하는 실용적인 조언입니다. 미신적이지 마십시오.
dkellner 2014-08-04

5
여기에 매우 유용한 댓글이 있습니다. 사용되지 않는 경고를 남겨두고 라이브 코드를 손상 하시겠습니까? Nice .. 물론 경고를 숨기는 것이 이상적이지는 않지만 코드를 작동 순서대로 유지하려면 여전히 수행해야합니다. 좋은 개발자는 여전히 더 이상 사용되지 않는 코드를 추적하고 향후 업데이트를 위해 일정을 잡을 것입니다.
sturrockad

1
오류 / 경고 억제는이 문제를 해결하는 방법이 아닙니다. 프로덕션 서버의 사용자에게 원시 경고 / 오류가 표시되면 잘못된 것입니다. 프로덕션 서버 만 있고 테스트 용 개발 환경이없는 경우 wronger 그 일을 재 - 프로덕션에 릴리스하기 전에 오류 / 개발에 대한 경고를 고정하지 않는 경우, 당신은 wrongest을하고있는
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 Improved Extension 을 사용하지만 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

일반적으로 "사용되지 않음"경고는 오래된 기능을 사용하려 함을 의미합니다. 코드가 작동하지 않는다는 의미는 아니지만 리팩토링을 고려해야합니다.

귀하의 경우 functons mysql_은 더 이상 사용되지 않습니다. 그것에 대해 더 알고 싶다면 이미 좋은 설명이 있습니다. PHP에서 mysql_ * 함수를 사용하지 않는 이유는 무엇입니까?


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 19 년

-3

이것을 PHP 페이지에 넣으십시오.

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

PHP 7 이상에서는 더 이상 작동하지 않습니다. 그것은 ...는 '솔루션'아니다
기네스 르 웰린

-5

@나를 위해 작품 추가 !

나는 테스트했다 error_reporting(E_ALL ^ E_DEPRECATED);


1
당신은 당신은 단지 메시지가 숨어있는 오류를 해결하지 않는
레오나르도 Sapuy

PHP 7 이상에서는 더 이상 작동하지 않습니다. 그것은 ...는 '솔루션'아니다
기네스 르 웰린
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.