[팁] mysql_connect 오류 해결 방법

  • Read 6368
  • -
  • 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

개발자포럼
번호 제목 글쓴이 조회 날짜
106 [링크] Error: diskfilter writes are not support
레벨 3 iloveme
790 09.19
105 [링크] 개발관련 문서 모음
레벨 3 iloveme
1048 08.31
104 [링크] 게임회사 해외취업 자료조사
레벨 3 iloveme
1142 03.23
103 [링크] 어려운 것을 쉽게 배우는 방법 : 슈퍼 파워를 장착하기 위한 3단계 학습
레벨 3 iloveme
1364 02.18
102 [링크] 무료 SSL 인증서 설치 방법
레벨 3 iloveme
1456 01.28
101 [링크] JAVA XML Parser DOM/SAX 비교
레벨 3 iloveme
1502 06.05
100 [링크] 초보 개발자가 꼭 알아두어야 할 다섯 가지 기술들
레벨 3 iloveme
1564 06.03
99 [링크] 안드로이드 share 공유 버튼 추가하기
레벨 3 iloveme
1855 06.03
98 [링크] 공유 share api 제공 사이트
레벨 3 iloveme
1272 06.03
97 [링크] 안드로이드 core, ui 관련 오픈소스 사이트
레벨 5 이카루스
3763 05.14
96 [팁] Android GCM 구축 방법 정보 모음
레벨 5 이카루스
4378 05.08
95 [링크] Github 이클립스와 연동하기
레벨 5 이카루스
1897 04.14
94 [링크] Ubuntu GitHub 서버 설치 방법
레벨 5 이카루스
3907 04.14
93 [팁] 카카오링크 해시키 추출 방법
레벨 5 이카루스
6062 03.16
92 [팁] Android 구글 admob 전면 광고 적용 방법
레벨 5 이카루스
9789 03.06
91 [팁] Side-2930C SCSI Driver 첨부파일
레벨 3 iloveme
1389 03.04
90 [자유] Mezzmo (1005) (Windows) - 미디어스트리밍 프로그램
레벨 3 iloveme
7156 01.22
89 [자유] vmware 11 설치 방법
레벨 3 iloveme
7473 01.18
88 [팁] Winamp를 이용한 음악방송 방법 첨부파일
레벨 5 이카루스
2933 11.21
87 [팁] SHOUTcast 를 이용한 인터넷 라이브 방송 시스템 구축
레벨 5 이카루스
3652 11.21
회원 로그인
아이디/비번 기억
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.
많이 본 글
댓글 많은 글
추천글