APM(Apache + PHP + MySQL) 소스설치 방식으로 PHP 버전은 5.6.30 버전을 설치했더니
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead 메시지가 뜨면서 접속이 제대로 안된다.
기존 모든 소스를 수정해야 하나, APM 소스 설치를 다시 해야 하나 고민되어 검색을 했더니 이렇게 하라고 나온다.
$link = @mysql_connect($db_server,$db_user_name,$db_password);
@ 를 앞에 붙이라고 나온다.
오류 제어 연산자(@) : PHP의 코드가 오류가 있을 때 오류 메시지를 무시하도록 하는 연산자
오류 메시지를 어떤 상황에서든 출력하지 않도록 하고자 할 때 사용하는 연산자이다.
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
이렇게 추가하라고 알려주기도 한다.
원인이 The mysql_* functions has been deprecated as of PHP 5.5.0 버전 이상부터 나오는 현상이란다.
근본적으로는 mysqli_* 방식이나 PDO 방식으로 변경해야 되는데 전부 수정하기에는 엄두가 나지 않는다.
일단 앞에 오류제어 연산자 @를 붙이는 방법으로 임시 조치하여 사용해보고 있다.
PHP 5.4.6 에서 정상 동작하는 코드가 PHP 5.6.30 에서 동작되지 않는 것이 있었는데 코드를 세부적으로 살펴보니 낮은 버전에서는 MySQL 연결 문법을 대략 생략해도 동작되던게 동작되지 않는 증상이라 수정처리했더니 잘 동작한다.
APM 소스 설치시 옵션에 따라서 약간씩 설치가 되는 사이트도 있고 아닌 곳도 있어서 설치하면서 고생을 좀 했다.
phpize 를 이용해서 미처 설치하지 못한 옵션을 추가하는 방법도 알게되고 난 후에는 여러모로 APM 소스 설치가 편리하기는 하더라.
PHP 5.6.30 에서 속도가 좀 더 개선(?)된 느낌이 들기는 한다.
다시 정리하자면
기존 코드 수정을 최소화하면서 이용하는 방법은
mysql_connect( $this->host, $this->user, $this->pass ) or die('error connection'); 를 @mysql_connect( $this->host, $this->user, $this->pass ) or die('error connection'); 로 해주면 없어진다.
mysql_connect( $this->host, $this->user, $this->pass ) or die('error connection'); 를 @mysql_connect( $this->host, $this->user, $this->pass ) or die('error connection'); 로 해주면 없어진다. 출처: http://link2me.tistory.com/1167 [소소한 일상 및 업무TIP 다루기] |
제대로 변경하려면
연동에 사용되는 함수를 찾아서 전부 변경해줘야 한다.
$connect = mysqli_connect('localhost', 'user', 'password', 'dbname');
replace all mysql_* functions into mysqli_* functions
//PHP 5.4 o earlier (DEPRECATED)
$con = mysql_connect($host,$user,$password) or exit("Connection Error");
$conn = mysql_select_db($db, $con);
mysql_query("set names utf8");
//PHP 5.5 (New method)
$conn = mysqli_connect($host,$user,$password,$db);
PDO (PHP Data Objects) 방식으로 연동
- 연동방식으로 만든 함수를 많이 수정해야만 정상동작되는거 같다. 기존 함수를 변환시 주의할 점이 좀 있다.
$conn = new PDO($hostDb, $user, $password);
또는
$conn = new PDO('mysql:host=localhost;dbname={$dbname};charset=utf8', $user, $password);
로 한다.
'Web 프로그램 > Web 디버깅' 카테고리의 다른 글
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given (0) | 2018.07.24 |
---|---|
PHP 함수의 결과는 정수일까? String일까? (0) | 2018.06.24 |
[ajax 에러] JSON.parse: unexpected character at line 1 column 1 of the JSON data (0) | 2017.02.18 |
PHP 디버깅 요령 및 경고메시지 처리 방법 (2) | 2016.11.30 |
Undefined index 에러 해결방법 (0) | 2016.09.10 |