2015-11-04 120 views
1

我正在開發一個帶有Silex框架的小型客戶區項目。我想使用SessionServiceProviderPdoSessionHandler將會話存儲在數據庫中,但是當我嘗試使用測試帳戶登錄時,會話被寫入數據庫,但登錄未正確完成,我在循環中獲取登錄頁面。此外,我我得到錯誤以下錯誤日誌登錄不能在Silex中使用PostgreSQL

Uncaught exception 'PDOException' with message 'SQLSTATE[22021]: Character not in repertoire: 7 ERROR: invalid byte sequence for encoding "UTF8" 

的會話表看起來像這樣(從Silex documentation page得到它):

CREATE TABLE sessions (
    sess_id VARCHAR(255) NOT NULL, 
    sess_value TEXT NOT NULL, 
    sess_time INTEGER NOT NULL, 
    PRIMARY KEY(sess_id) 
); 

任何人都可以幫助嗎?

+0

你在Postgres的使用UTF8存儲(上表/列或整個數據庫)創建表? –

+0

數據庫是這樣定義的:'backoffice | qiuandei | UTF8 | en_US.utf8 | en_US.utf8 | ' – madelman

回答

2

我發現自己用了同樣的錯誤,前一段時間,貌似硅石文檔不正確對PostgreSQL的sess_value場應該是一個BYTEA類型字段,因爲會話數據可以包含未在UTF-8接受類似的字符NULL字符0x00

另外,由於Silex使用Symfony2組件在數據庫中存儲會話,所以應該添加另一個字段sess_lifetime,它將包含數據庫會話的生存期。

所以定義應該是:

CREATE TABLE sessions (
    sess_id VARCHAR(255) NOT NULL, 
    sess_value BYTEA NOT NULL, 
    sess_time INTEGER NOT NULL, 
    sess_lifetime INTEGER NOT NULL, 
    PRIMARY KEY(sess_id) 
); 
+1

太棒了!我改變了桌子的定義,而不是它的工作!非常感謝!! – madelman