DB 및 PDO 문을 정적으로 캐싱하기 위해 스크립트를 사용하고 있습니다. 여기데이터베이스 연결 캐싱 문제가 발생했습니다.
내가 페이지 캐싱하지만 전역의 $ _SESSION 캐싱
에서뿐 아니라 정적이를 만들고 싶어하지만 내 연결 방법은
private static function CONNECT()
{
if(self::$dbConn === null)
{
if(isset($_SESSION['X_DB_CONN']))
{
self::$dbConn = $_SESSION['X_DB_CONN'];echo "session cache hit";
}
else
{
$connUrl = "mysql:host=".self::$host.";dbname=".self::$db;
self::$dbConn = new PDO($connUrl,self::$username,self::$password,array(PDO::ATTR_PERSISTENT => true));
$_SESSION['X_DB_CONN'] = self::$dbConn;
if(isset($_SESSION['test']))
{
echo ":)";
$_SESSION['test'] = "OO";
}
echo "session cache NOT hit";
}
}
}
도움이되지 않는 변경 다음
<?php
require_once 'ExceptionHandler.php';
final class Database {
private static $db = "test";
private static $host = "localhost";
private static $username = "root";
private static $password = "";
private static $dbConn = null;
private static $queryCatch = array();
private static function CONNECT()
{
if(self::$dbConn === null)
{
$connUrl = "mysql:host=".self::$host.";dbname=".self::$db;
self::$dbConn = new PDO($connUrl,self::$username,self::$password,array(PDO::ATTR_PERSISTENT => true));
}
}
public static function query($sql)
{
Database::CONNECT();
if(isset(self::$queryCatch[$sql]) && is_object(self::$queryCatch[$sql]))
{
$query = self::$queryCatch[$sql];
}
else
{
$query = self::$dbConn->prepare($sql);
self::$queryCatch[$sql] = $query;
}
$numargs = func_num_args();
$arg_list = func_get_args();
//start from 1st parameter as 0th parameter is the query
for ($i = 1; $i < $numargs; $i++) {
if(is_int($arg_list[$i]))
{
$query->bindParam($i,$arg_list[$i],PDO::PARAM_INT);
}
else
{
$query->bindParam($i,$arg_list[$i],PDO::PARAM_STR);
}
}
$query->execute();
return $query;
}
}
?>
입니다
세션을 올바르게 시작했습니다. 내 문제를 증명하고 진술하려면 :
$ _SESSION [ 'test']은 (는) 다른 페이지에서 ":)"로 설정됩니다. :) 은이 페이지의 if 문 출력입니다. 즉이어야한다, 그래서
Beides 항상
session cache NOT hit
) 이것은 내가으로 session_start를 (포함했다
Fatal error: Exception thrown without a stack frame in Unknown on line 0
표준 PHP 오류 콘솔로 출력
표시됩니다 문제
그래서 PDO가 객체를 잘못 리턴했다고 가정합니다. 핸들러 만 반환합니까? – footy
Object WITH handler : – Emmerman
그래서 서버/시스템에 객체가 생성 된 다음 pHp가이 객체의 포인터를 스크립트에 반환합니까? – footy