2013-05-09 182 views
0

我真的不知道是什麼原因導致這個錯誤時,未能執行SQL語句。CDbCommand部署到服務器

CDbCommand failed to execute the SQL statement: CDbCommand failed to prepare the SQL statement: SQLSTATE[HY000]: 
    General error: 1 table 'YiiSession' already exists. The SQL statement executed was: 
    CREATE TABLE 'YiiSession' (
    "id" CHAR(32) PRIMARY KEY, 
    "expire" integer, 
    "data" BLOB 
    ) 

它是在服務器或警予.. 但我想它是在警予的一部分。 但我錯過了什麼配置? 我不是很熟悉,因爲警予即時通訊新給它。 請幫忙嗎? 在此先感謝

更新:我查YiiSession在我的數據庫,但它不是在那裏...

回答

1

刪除runtime文件夾。 由於運行時文件夾由系統完成各種任務:會議記錄等 也正是在運行時文件夾YiiSession表創建

1

在任何人的情況下仍引用這一點 - 更完整的答案是,Yii的在默認情況下使用SQLite3的數據庫,如果你不指定在(CDbHttpSession)會話配置的連接字符串。這個SQLite數據庫是在運行時文件夾中創建的。 (這就是爲什麼刪除運行時文件夾的內容的作品 - 你實際上只需要刪除會話xxxx.db文件。)如果你想使用你正在使用你的主要連接同一個數據庫,添加:

'connectionID'=>'db', 

到您的會話配置。它也建議在生產中使用您設置autoCreateSessionTable爲false,這也將防止錯誤 - 你只需要確保你部署的SQLite數據庫或建立適當的表在主數據庫。看到here

默認情況下,它會使用一個名爲「會話YiiVersion.db」的sqlite3的數據庫應用程序在運行目錄下。您還可以指定connectionID,以便它使用數據庫應用程序組件訪問數據庫。