105 lines
3.6 KiB
PHP
105 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* bbs/api/diagnosis.php — 디버그용 진단 API
|
|
* 현재 사용자의 세션, 키워드 저장 상태, DB 연결 등을 확인
|
|
*/
|
|
declare(strict_types=1);
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
require_once dirname(__DIR__) . '/db_conn.php';
|
|
require_once dirname(__DIR__) . '/auth.php';
|
|
|
|
edu_start_session();
|
|
|
|
$memberId = edu_current_member_id();
|
|
$sysCompCode = (string)($_SESSION['sys_comp_code'] ?? '');
|
|
|
|
$diag = [
|
|
'member_id' => $memberId,
|
|
'sys_comp_code' => $sysCompCode,
|
|
'session_keys' => array_keys($_SESSION),
|
|
];
|
|
|
|
if ($memberId === '') {
|
|
echo json_encode(['success' => false, 'error' => 'not_logged_in'] + $diag, JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$pdo = db_conn();
|
|
$pdo->exec("SET NAMES 'utf8mb4'");
|
|
|
|
// 1. 사용자 정보
|
|
$userSt = $pdo->prepare('SELECT * FROM edu_users WHERE member_id = ? ORDER BY sys_comp_code LIMIT 1');
|
|
$userSt->execute([$memberId]);
|
|
$userRow = $userSt->fetch(PDO::FETCH_ASSOC);
|
|
$diag['user_info'] = $userRow ? [
|
|
'name' => $userRow['name'] ?? '',
|
|
'rank_name' => $userRow['rank_name'] ?? '',
|
|
'sys_comp_code' => $userRow['sys_comp_code'] ?? '',
|
|
] : null;
|
|
|
|
// 2. 저장된 키워드 (sys_comp_code 제약 없이)
|
|
$kwSt = $pdo->prepare("
|
|
SELECT uk.keyword_code, ec.code_name AS keyword_name, uk.member_id, uk.sys_comp_code
|
|
FROM edu_user_keywords uk
|
|
JOIN edu_codes ec ON ec.base_code = uk.keyword_code
|
|
WHERE uk.member_id = ?
|
|
ORDER BY uk.keyword_code
|
|
");
|
|
$kwSt->execute([$memberId]);
|
|
$savedKws = $kwSt->fetchAll(PDO::FETCH_ASSOC);
|
|
$diag['saved_keywords'] = $savedKws;
|
|
$diag['saved_keywords_count'] = count($savedKws);
|
|
|
|
// 3. 테이블 존재 확인
|
|
$tblCheck = [];
|
|
foreach (['edu_user_keywords', 'edu_codes', 'edu_recommend_keywords', 'edu_contents'] as $tbl) {
|
|
try {
|
|
$cnt = $pdo->query("SELECT COUNT(*) FROM {$tbl}")->fetchColumn();
|
|
$tblCheck[$tbl] = $cnt;
|
|
} catch (Exception $e) {
|
|
$tblCheck[$tbl] = 'ERROR: ' . $e->getMessage();
|
|
}
|
|
}
|
|
$diag['table_check'] = $tblCheck;
|
|
|
|
// 3b. edu_recommend_keywords 컬럼 확인
|
|
try {
|
|
$cols = $pdo->query("SHOW COLUMNS FROM edu_recommend_keywords")->fetchAll(PDO::FETCH_ASSOC);
|
|
$diag['edu_recommend_keywords_columns'] = array_column($cols, 'Field');
|
|
} catch (Exception $e) {
|
|
$diag['edu_recommend_keywords_columns'] = 'ERROR: ' . $e->getMessage();
|
|
}
|
|
|
|
// 4. 회사 추천 키워드 샘플 (main_data.php와 동일 규칙)
|
|
try {
|
|
$admSt = $pdo->prepare("
|
|
SELECT rk.keyword_code, ec.code_name AS keyword_name, rk.is_active, rk.sys_comp_code
|
|
FROM edu_recommend_keywords rk
|
|
JOIN edu_codes ec ON ec.base_code = rk.keyword_code
|
|
WHERE rk.is_active = 1
|
|
AND rk.keyword_code IS NOT NULL
|
|
AND rk.keyword_code <> ''
|
|
AND ec.group_code = 'KW100'
|
|
ORDER BY rk.keyword_code
|
|
LIMIT 2
|
|
");
|
|
$admSt->execute();
|
|
$admKws = $admSt->fetchAll(PDO::FETCH_ASSOC);
|
|
$diag['admin_keywords_sample'] = $admKws;
|
|
$diag['admin_keywords_count'] = count($admKws);
|
|
} catch (Exception $e) {
|
|
$diag['admin_keywords_sample'] = 'ERROR: ' . $e->getMessage();
|
|
$diag['admin_keywords_count'] = 0;
|
|
}
|
|
|
|
echo json_encode(['success' => true] + $diag, JSON_UNESCAPED_UNICODE);
|
|
|
|
} catch (Throwable $e) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'error' => $e->getMessage(),
|
|
] + $diag, JSON_UNESCAPED_UNICODE);
|
|
}
|