그누보드 sql_insert_id() 에러 도와주세요
본문
그누보드 5.4.18 버전이고, 기존 php 5.3.13 버전에서 8.2.21 버전으로 변경 중 board_update.php 에 아래 insert 후 $wr_id = sql_insert_id(); 에서 500에러가 발생하는데 도와주세요
$sql = " insert into $write_table
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name',
wr_option = '$html,$secret,$mail',
wr_subject = '$wr_subject',
wr_content = '$wr_content',
wr_seo_title = '$wr_seo_title',
wr_link1 = '$wr_link1',
wr_link2 = '$wr_link2',
wr_link1_hit = 0,
wr_link2_hit = 0,
wr_hit = 0,
wr_good = 0,
wr_nogood = 0,
mb_id = '{$member['mb_id']}',
wr_password = '$wr_password',
wr_name = '$wr_name',
wr_email = '$wr_email',
wr_homepage = '$wr_homepage',
wr_datetime = '".G5_TIME_YMDHIS."',
wr_last = '".G5_TIME_YMDHIS."',
wr_ip = '{$_SERVER['REMOTE_ADDR']}',
wr_1 = '$wr_1',
wr_2 = '$wr_2',
wr_3 = '$wr_3',
wr_4 = '$wr_4',
wr_5 = '$wr_5',
wr_6 = '$wr_6',
wr_7 = '$wr_7',
wr_8 = '$wr_8',
wr_9 = '$wr_9',
wr_10 = '$wr_10' ";
sql_query($sql);
$wr_id = sql_insert_id();
sql_insert_id() 함수는 아래와 같습니다.
function sql_insert_id($link=null)
{
global $g5;
if(!$link)
$link = $g5['connect_db'];
if(function_exists('mysqli_insert_id') && G5_MYSQLI_USE)
return mysqli_insert_id($link);
else
return mysql_insert_id($link);
}
답변 3
board_update.php??
자신이 만든 화일인가요?
마지막에 true를 넣어서 에러가 코드가 나오는지 확인해보세요
sql_query($sql,true);
일단 500에러 발생을 어디서 하는지 상단에 에러로그 출력해서 발생되는 원인을 체크해서 해당 부분에 문제 되는 부분을 수정해 보셔야 할듯 보입니다.
PHP 8.2 환경에서 발생하는 500 오류를 해결하려면,
sql_insert_id()와 SQL 실행 로직을 다음과 같이 점검하고 개선해야 합니다.
*sql_insert_id() 함수 수정:
mysql_insert_id() 대신 mysqli_insert_id()를 사용하고,
$g5['connect_db']가 유효한 연결 객체인지 확인합니다.
*SQL 실행 결과 검증:
sql_query() 실행 후 반환값을 확인하며, 에러 발생 시 데이터베이스 오류 메시지를 기록.
*에러 로그 활성화:
PHP와 웹 서버 에러 로그를 활성화하여 오류 원인을 정확히 분석
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
*SQL Injection 방지
사용자 입력 값을 mysqli_real_escape_string으로 필터링하거나,
prepared statement를 사용하는 방식으로 보안을 강화해야 함.
*500 오류 디버깅
$g5['connect_db']가 mysqli 연결 객체인지 확인하고,
쿼리 실행 중 발생한 오류 메시지를 기록.
// SQL 쿼리 실행
$sql = "INSERT INTO $write_table (
wr_num, wr_reply, wr_comment, ca_name, wr_option, wr_subject, wr_content,
wr_seo_title, wr_link1, wr_link2, wr_link1_hit, wr_link2_hit, wr_hit,
wr_good, wr_nogood, mb_id, wr_password, wr_name, wr_email, wr_homepage,
wr_datetime, wr_last, wr_ip, wr_1, wr_2, wr_3, wr_4, wr_5, wr_6, wr_7, wr_8, wr_9, wr_10
) VALUES (?, ?, 0, ?, ?, ?, ?, ?, ?, ?, 0, 0, 0, 0, 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $g5['connect_db']->prepare($sql);
if ($stmt === false) {
error_log("Prepare Statement Error: " . $g5['connect_db']->error);
die("An error occurred. Please try again later.");
}
// Bind parameters
$stmt->bind_param(
'sssss',
$wr_num, $wr_reply, $ca_name, $html, $secret, $mail,
$wr_subject, $wr_content, $wr_seo_title, $wr_link1, $wr_link2,
$member['mb_id'], $wr_password, $wr_name, $wr_email, $wr_homepage,
G5_TIME_YMDHIS, G5_TIME_YMDHIS, $_SERVER['REMOTE_ADDR'],
$wr_1, $wr_2, $wr_3, $wr_4, $wr_5, $wr_6, $wr_7, $wr_8, $wr_9, $wr_10
);
// Execute statement
if (!$stmt->execute()) {
error_log("SQL Execution Error: " . $stmt->error);
die("An error occurred. Please try again later.");
}
// Get the last inserted ID
$wr_id = $stmt->insert_id;
if (!$wr_id) {
error_log("Failed to retrieve last insert ID.");
die("An error occurred. Please try again later.");
}
// Close statement
$stmt->close();