$sql를 인덱스로 두고 결과를 배열에 저장 후 리턴
본문
한 세션 안에서 $sql 문이 같으면 결과 값도 동일하다는 전제 하에서 아래와 같은 함수를 생각해봤는데요.
아주 원시적인 방식이라 문제점이 없을지 고민스럽네요.
혹시 이런 방식을 도입해서 써보신 분이 있으신지 문제점은 없었는지 어쭙고 싶습니다.
테스트를 해보니 반복적인 쿼리의 경우 3000번을 돌리면 4.5초가 0.0014초로 줄어들긴 했습니다만..
전역적으로 적용을 시켜도 될런지 계속 고민스럽네요.
// $db는 PDO 입니다.
function sql_fetch($sql, $link = null): ?array
{
global $db, $cz;
if ($link === null) {
$link = $db;
}
if (isset($cz['db']) && $cz['db'] === $link && isset($cz[$sql])) {
return $cz[$sql];
}
$rst = sql_query($sql, $link);
if (get_class($rst) === 'PDOException') {
return (array)$rst;
}
$row = $rst->fetch(PDO::FETCH_ASSOC);
$cz['db'] = $link;
$cz[$sql] = $row;
return (array)$row;
}
답변을 작성하시기 전에 로그인 해주세요.