Ben PHP'nin session_set_save_handler
ile deney yaşıyorum ve ben oturum verilerini saklamak için bir PDO bağlantısı kullanmak istiyorum.
Ben yazma eylemler için bir geri olarak bu işlevi vardır:
function _write($id, $data) {
logger('_WRITE ' . $id . ' ' . $data);
try {
$access = time();
$sql = 'REPLACE INTO sessions SET id=:id, access=:access, data=:data';
logger('This is the last line in this function that appears in the log.');
$stmt = $GLOBALS['db']->prepare($sql);
logger('This never gets logged! :(');
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->bindParam(':access', $access, PDO::PARAM_INT);
$stmt->bindParam(':data', $data, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
return true;
} catch (PDOException $e) {
logger('This is never executed.');
logger($e->getTraceAsString());
}
}
İlk iki günlük iletileri her zaman göstermek, ancak üçüncü bir hemen sonra $stmt = $GLOBALS['db']->prepare($sql)
günlük dosyasına yapar ve asla bir istisna hiçbir iz de yok.
sessions db tablo boş kalır.
_close
geri çağırma gelen günlük mesajı her zaman mevcuttur.
Burada veritabanına bağlanmak nasıl:
$db = new PDO('mysql:host=' . DBHOST . ';dbname=' . DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
PHP 5.2.10 var.
Ben sadece bir "elle hazırlanan" $sql
içerikli $GLOBALS['db']->exec($sql)
çalıştırmayı denedim, ama yine de sessizce başarısız oldu. Sorgu kendisi ben db konsol üzerinden çalıştırmak mümkün oldu tüm hakkıdır.
Edit:
VolkerK Ben bu garip olayların arkasındaki nedeni açıklıyor this article hangi buldum sorunu tespit etti sonra. Belki de diğerleri de bilgilendirici olabilir.
2nd edit:
Az ağrılı, sihirli bir çözüm benim ön denetleyicisi (ana index.php) dosyasının sonuna kadar aşağıdaki işlev çağrısı eklemek zorunda olduğunu:
session_write_close();