2010-06-28 71 views
1

我正在編程一個網頁,用戶可以上傳他自己的圖庫。當這樣做時,系統爲與圖庫具有相同名稱的圖像創建子文件夾,對圖庫的引用作爲表格的一行添加,併爲圖庫創建單獨的表格,其中包含圖像列表。西歐語言mysql查詢問題

當我嘗試創建一個新的畫廊時,只要沒有西歐標誌,一切都會正常工作。如果我舉例說名稱的畫廊「beär」我會得到一個錯誤,「表'databasename.beär...'不存在。

然而,表存在與正確的名稱, 我有嘗試在mysql查詢返回錯誤之前打印出變量$ sub(表示查詢中的庫名稱),它正確地打印錯誤。

還試過mysql_query(「SET NAMES'latin1'」,$ connection) ))和UTF-8 一樣,latin1什麼都不做,UTF-8將所有東西都擰得更緊(圖片名稱實際上就是be?rr)

文本文件在ISO 8859-1, c harset定義也是ISO 8859-1

這是查詢:

if(!($result = @ mysql_query("SELECT * FROM {$database}.`{$sub}` 
      ORDER BY item_id DESC", $connection))) 
     {showerror();} 

任何幫助是極大的讚賞

+0

你真正的問題是數據庫設計。解決這個問題,你將不會遇到上述問題(還有很多其他問題) – Pete 2010-06-28 10:46:38

回答

5

表「databasename.beär...

您正在通過圖庫名稱創建數據庫表 在任何編碼中,都無法與特殊字符一起播放!

修正:根據docs,它確實是可以使用任何字母數字字符,從當前字符集!在這種情況下,你需要改變你的輸入。查看錯誤消息,Beär中的ä將作爲UTF-8字符提供。你需要解決這個問題。這是發生在Ajax請求中嗎?這些默認編碼爲UTF-8。

在任何情況下,我都覺得在表名中使用特殊字符會感到不自在。我不會這樣做。

此外,創建每個用戶表通常是基本設計錯誤的症狀。爲什麼不把所有記錄保存在一張表中,通過列標識用戶?

+0

+1尤其是關於數據庫設計。 – Pete 2010-06-28 10:45:45

+0

這是一個每個圖庫表系統,而不是每個用戶。這不是一個社區,所以用戶有權編輯相同的畫廊(如果他們擁有正確的權限) 另外,即使不應該使用特殊字符(如果可能),至少可以使用æø和因爲他們(可惜)是挪威的一個組成部分。 sql查詢來自php腳本。 – Rakoon 2010-06-28 10:58:01

+0

@Rakoon爲每個畫廊創建一個表是糟糕的設計。正如我所說,爲什麼不用一個大畫廊來放置一個'gallery'字段?這將解決所有的命名問題。即使你使用特殊字符,由於mySQL的命名限制,也會有很多庫名無法使用。 – 2010-06-28 11:02:28