필자는 필요할 때이 함수를 사용하여 MySQL 데이터베이스에 연결하고 동일한 PHP 스크립트에서 필요한 추가 쿼리에 동일한 연결 개체를 다시 사용합니다.데이터베이스 연결 개체 재사용
function cnn() {
static $pdo;
if(!isset($pdo)) {
try {
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
$pdo->setAttribute(PDO::ATTR_TIMEOUT, 30);
$pdo->setAttribute(PDO::ATTR_PERSISTENT, true);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
return $pdo;
} catch(PDOException $e) {
http_response_code(503);
echo $e->getCode.': '.$e->getMessage();
die(); //or whatever error handler you use
}
} else {
return $pdo;
}
}
첫 번째 쿼리
echo cnn()->query('SELECT title FROM news WHERE id=516;')->fetch(PDO::FETCH_COLUMN)
당신은이 방법에 동의하십니까 (객체 재사용)
echo cnn()->query('SELECT firstname FROM user WHERE id=4;')->fetch(PDO::FETCH_COLUMN)
두 번째 쿼리 (객체가 만들어집니다)? 그것이 최적화 될 수 있다고 생각합니까? 의견을 보내 주셔서 감사합니다.
연결을 닫아야하는 경우 어떻게해야합니까? 활성 상태인지 (닫히지 않았는지) 어떻게 결정 하시겠습니까? – BlitZ
얼마나 최적화하고 싶습니까? 정말로 작은 최적화 측면에서 임시 변수에 저장해야합니다. 즉, CALL과 BRANCH 대신 MOVE 일 수 있지만, 1 μs와 같습니다. = D – Jerska
@CORRUPT 일반적으로 스크립트가 끝나면 PHP는 연결을 닫습니다. 이 경우 영구 연결 (6 행)을 사용하고 있습니다. 즉, 연결이 스크립트 끝에서 닫히지 않지만 다른 스크립트가 동일한 자격 증명을 사용하여 연결을 요청할 때 캐시되고 다시 사용됩니다. 그래도 사실이라면 $ pdo를 null로 설정하는 매개 변수를 추가하는 것이 좋습니다. – andufo