[팁] mysql_connect 오류 해결 방법
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
▼ 이 게시물의 댓글 + 0
* 엮인글 + 0