728x90
반응형
그누보드5를 PHP7, MySQL8의 최신 버전 환경에 설치 할 때 의도치 않은 에러를 만날 수 있다.
그누보드5 설치가 시작되었습니다. 1. 전체 테이블 생성 완료 insert into `g5_member` set mb_id = '******, mb_password = PASSWORD('*******'), mb_name = '******', mb_nick = '******', mb_email = ''*****@daum.net', mb_level = '10', mb_mailling = '1', mb_open = '1', mb_email_certify = '2019-04-05 17:32:47', mb_datetime = '2019-04-05 17:32:47', mb_ip = '119.205.37.***' 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('***********'), mb_name = '*******', mb_nic' at line 3 error file : /install/install_db.php |
그누보드5를 설치하고 마지막에 이런 에러를 만났다면 간단하게 문제를 해결 할 수 있다.
이 메시지는 해당 sql 구문의 앞뒤에 연관성 있는 문법 에러가 있다는 의미다. MySQL8 이상에서는 TEXT를 암호화 하는 PASSWORD() 함수를 사용 할 수 없다. 서버 설정을 구 버전 형태로 바꾸면 되지만 그럴거면 굳이 MySQL8을 사용할 이유가 없을 것이다.
PHP에서 TEXT를 해싱하는 함수는 몇 개가 있는데 필자는 MD5()를 사용한다. 따라서 SQL 구문에서 PASSWORD()를 MD5()로 대체하면 된다.
만약 install/install_db.php 파일 176라인에서 아래와 같은 SQL 구문을 만났다면 PASSWORD()를 MD5()로 바꿔서 다시 그누보드5를 설치 해 보자.
// 관리자 회원가입
$sql = " insert into `{$table_prefix}member`
set mb_id = '$admin_id',
mb_password = MD5('$admin_pass'),
mb_name = '$admin_name',
mb_nick = '$admin_name',
mb_email = '$admin_email',
mb_level = '10',
mb_mailling = '1',
mb_open = '1',
mb_email_certify = '".G5_TIME_YMDHIS."',
mb_datetime = '".G5_TIME_YMDHIS."',
mb_ip = '{$_SERVER['REMOTE_ADDR']}'
";
그런데 그누보드5에서 PASSWORD() 함수로 암호화 하는 함수가 하나 더 있다.
lib/commcon.lib.php의 1558번 라인에서
function sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select password('$value') as pass ");
return $row['pass'];
}
이런 사용자 함수를 만날 수 있다. 여기서도 password('$value') as pass 부분을 md5('$value') as pass로 변경해 줘야 한다.
728x90
반응형
'프로그래밍 > PHP & HTML' 카테고리의 다른 글
그누보드에서 body태그의 leftmargin, topmargin 속성을 이용 할 수 없을 때 (0) | 2019.09.18 |
---|---|
API로 SNS 페이스북, 트위터, 카카오스토리에 공유하기 소스 (0) | 2019.09.18 |
트위터 API 1.1를 이용한 트위터 검색과 API Key 발급 받기 (0) | 2019.09.18 |