I am using a script to cache statically DB and PDO statements executed.
here it is
<?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($开发者_StackOverflow社区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;
}
}
?>
I wanted to make this not just statically in page caching but a global $_SESSION caching
But the following changed to my connect method is not helping
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";
}
}
}
I have started the session properly. To Give proof and stating my problem:
The $_SESSION['test'] is set from another page to ":)". And :) is the output from the if statement on this page.
Beides always
session cache NOT hit
is displayed
This is the output by the standard php error console
Fatal error: Exception thrown without a stack frame in Unknown on line 0
I have included the session_start() so that shouldn't be the problem
You can't cache objects, resourses or handlers this way. Because this is pointer (or link) to the system resource, not an actual resource. So when when you cache it, you cache link, and of course after refresh link will be broken.
PDO::ATTR_PERSISTENT => true
would be really enough.
精彩评论