[팁] mysql_connect 오류 해결 방법

  • Read 6367
  • -
  • Score 0/0
By. 2014.10.07 11:45
레벨 5 이카루스 ( Lv. 5 )
mysql_connect 오류 해결 방법

오류 : mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead


php 5.5.x 버전을 사용하는 경우(XAMPP 1.8.x 이상 포함) 예전의 mysql 함수를 사용하면 에러가 발생한다. 예를 들어 mysql_connect()를 사용하면 아래와 같이 에러메시지가 표시된다.

mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead…

원인

php5.5 이상에서는 공식적으로 mysql_connect()와 같은 mysql 연결 함수들을 사용하지 않기로 하였다. 다면 이 버전에서는 제공은 하되 향후 버전에서는 제거하겠다는 것이다.

http://kr1.php.net/manual/en/function.mysql-connect.php 페이지에 가 보면 아래와 같은 경고 문구가 표시되어 있다.

Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used.

경고에 따르면 mysql_connect()는 php 5.5.0부터는 공식적으로 사용하지 않으며 앞으로 제거될 예정이므로 대신에 MySQLi나 PDO_MySQL 을 사용하라고 한다.

 
간단한 해결방법

가장 간단한 것은 이 버전에서 mysql_connect(), mysql_query와 같은 함수를 사용하면서 함수들 앞에 @를 붙이는 것이다. 함수들 앞에 @를 붙여 @mysql_connect()와 같이 사용하면 에러메시지를 표시하지 않는다. 아래와 같이 될 것이다.

<?php
$conn = @mysql_connect('localhost', 'user', 'pass');
@mysql_select_db('mydb', $conn);
@mysql_query("set names utf8");
$rs = @mysql_query('SELECT * from webskills') or die(@mysql_error());
$totalrows = @mysql_num_rows($rs);
while($row = @mysql_fetch_assoc($rs)) {
   echo $row['field1']."<br>";
}
또는 php.ini 설정 파일에서 error_reporting 부분을 찾아 아래와 같이 ^ E_DEPRECATED 를 추가해주는 것이다. 이것은 제거된(그러나 제공은 하는) 확장 또는 함수 등을 사용하면서 발생하는 에러메시지를 표시하지 않도록 해준다.

error_reporting = E_ALL ^ E_DEPRECATED

그러나 이 방법은 미래지향적인 해법은 아니다. 긴급히 문제를 해결하기 위한 방법일 뿐이다.

대신에 php 그룹에서 제안하는 대안인 MySQLi나 PDO_MySQL을 사용하는 것이 좋다.

물론 웹호스팅 등을 할 때 해당 서버의 php, mysql 버전을 확인해볼 필요는 있다. 너무 이전 버전이라면 새로운 확장이 제공되지 않을 수도 있기 때문이다.

 

PDO_MySQL

PDO_MySQL은 기존의 mysql_ 함수들에 비해 기능과 성능을 상당히 향상시켰다. 객체지향형 DB 연결및 활용이 가능하게 된 것이다.

간단히 이전 버전과 PDO 연결의 차이를 확인해보자.

<?php
$conn = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('mydb', $conn);
mysql_query("set names utf8");
 
<?php
$db = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8', 'user', 'pass');
세 줄에 거친 연결 설정이 PDO에서는 간단히 한 줄로 끝난다.

query문을 실행하고 결과를 표시하는 방법에서의 차이점도 예제를 통해서 알아보자.

<?php
$rs = mysql_query('SELECT * from webskills') or die(mysql_error());
$totalrows = mysql_num_rows($rs);
while($row = mysql_fetch_assoc($rs)) {
   echo $row['field1']."<br>";
}

<?php
$rs = $db->query('SELECT * FROM webskills');
$totalrows = $rs->rowCount();
while($row = $rs->fetch(PDO::FETCH_ASSOC)) {
    echo $row['field1']."<br>";
}
바로 위의 PDO를 활용한 query는 아래와 같이 좀 더 간단해진다.


<?php
foreach($db->query('SELECT * FROM webskills') as $row) {
    echo $row['field1']."<br>";
}
 

여기에 소개한 간단한 PDO 활용 팁은 아래 사이트를 참조하였다. 직접 방문하여 보다 많은 정보를 얻어보길 바란다.

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

http://php.net/manual/kr/ref.pdo-mysql.php

http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access–net-12059

개인적으로는 아래의 MySQLi보다는 PDO를 사용하는 편이 훨씬 더 생산성이나 효율성, 성능 면에서 이점이 많을 것으로 본다.

MySQLi 함수 사용

MySQLi는 기존의 mysql 함수들을 개선하였다. 전체적으로는 mysql_함수들과 비슷하지만 아래의 예제 코드를 참조하면 조금씩 바뀐 것을 할 수 있다.

<?php
$conn=mysqli_connect("localhost","user","pass","mydb");
if(mysqli_connect_errno()) echo "MySQL 연걸에 실패했습니다. 에러코드 : " . mysqli_connect_error();
mysqli_query($conn,"SELECT * FROM webskills");
mysqli_query($conn,"INSERT INTO webskills (subject,content) VALUES ('learning php part 1','php is html preprocessor...')");
mysqli_close($conn);

이 MySQLi 코드 얘제는 w3school.com에서 참고하였다. 아래 링크를 따라가면 좀 더 많은 정보를 얻어보실 수 있다.

http://www.w3schools.com/php/php_ref_mysqli.asp

출처 : http://webskills.kr/archives/408

개발자포럼 -Total. 106

개발자포럼
번호 제목 글쓴이 조회 날짜
86 [팁] robots 만들어 주는 사이트
레벨 3 iloveme
2090 10.27
85 [팁] 우분투 Top 모니터링 대체 HTop
레벨 3 iloveme
2810 10.07
>> [팁] mysql_connect 오류 해결 방법
레벨 5 이카루스
6368 10.07
83 [링크] 우분투 14.04 Munin 설치 방법
레벨 3 iloveme
6448 10.04
82 [링크] 우분투 14.04 MRTG 설치 방법
레벨 3 iloveme
6844 10.03
81 [링크] 우분투 apache awstats 모니터링
레벨 3 iloveme
2650 09.14
80 [팁] 개발자를 위한 디자인 독해법
레벨 3 iloveme
2858 08.14
79 [링크] Unity에서 New Admob 사용하기
레벨 3 iloveme
5008 08.13
78 [소식] [WSJ 125주년] 디즈니 CEO 특별기고 ‘스토리텔링은 IT의 미래’ 사진 첨부파일
레벨 3 iloveme
1455 08.02
77 [소식] [WSJ 125주년] 마크 저커버그 특별기고 ‘인터넷의 힘’ 사진 첨부파일
레벨 3 iloveme
1470 08.02
76 [링크] 모바일 UI 참고 사이트 모음
레벨 5 이카루스
3787 07.31
75 모바일 [링크] 새주소 api 8종 소개
레벨 5 이카루스
2672 07.30
74 [링크] 라즈베리 파이를 이용한 게임기 만들기
레벨 5 이카루스
8635 07.24
73 [팁] 웹 디버깅 툴 피들러(Fiddler)
레벨 5 이카루스
7453 07.24
72 [링크] 홈페이지 UI &amp; Theme 사이트 사진 첨부파일
레벨 5 이카루스
4048 07.24
71 [자유] 실시간 영상 송출 방식 아이디어
레벨 3 iloveme
2683 06.27
70 [링크] 미드 자막 모음 홈페이지
레벨 3 iloveme
2345 06.24
69 [팁] new AdMob 관련 질의 응답 정보
레벨 5 이카루스
4260 06.17
68 [링크] PC에 XPenology NAS 설치하기 첨부파일
레벨 3 iloveme
17326 05.16
67 [팁] 오픈소스 모니터링 툴 소개
레벨 3 iloveme
12429 05.09
회원 로그인
아이디/비번 기억
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.
많이 본 글
댓글 많은 글
추천글