mysql query error DZ程序出現(xiàn)mysql query error解決方法
mysql query error翻譯成中文的意思是:MySQL查詢錯誤
最直接簡單的方法是:
到數(shù)據(jù)庫高級管理,也就是PHPMYADMIN里面,全選數(shù)據(jù)庫點擊修復即可,如果你不知道數(shù)據(jù)庫怎么進或者PHPMYADMIN怎么進,聯(lián)系你的空間商或者懂的朋友,讓他幫你修復即可解決。
今天discuz論壇出現(xiàn)問題,如下:
Discuz! info: MySQL Query Error
Time: 2009-9-14 4:30pm
Script: /bbs/index.php
SQL: SELECT t.*, f.name FROM [Table]threads t, [Table]forums f WHERE t.fid<>'0' AND f.fid=t.fid AND f.fid not in (125) AND t.displayorder not in (-1,-2) ORDER BY t.dateline DESC LIMIT 0, 10
Error: Error writing file '/tmp/MYAmg92O' (Errcode: 28)
Errno.: 3
到 http://faq.comsenz.com 搜索此錯誤的解決方案
按照個人經驗,這是第一次遇到的問題,應該跟臨時目錄tmp有關。
操起g.cn開始搜索,得出理論性結果如下:
- 該問題也會發(fā)生在windows服務器上(C:\WINDOWS\TEMP\MY32),亦是跟臨時目錄有關
- 該問題跟論壇采用“首頁四格”插件有關
解決方法如下:
- 采用phpmyadmin對出問題的表進行repair(修復),獨立主機亦可用mysql工具修復
- 采用discuz tools進行數(shù)據(jù)庫修復(鏈接:TOOLS 2009賀歲版)
而實際操作中,我先采用了重啟服務器(自有vps服務器,linux系統(tǒng)),系統(tǒng)啟動完成后依次啟動php-cgi、nginx、mysql,重新打開論壇,一切正常。過了2個小時,論壇又出現(xiàn)那個問題,從問題上看是寫入數(shù)據(jù)出錯。檢查臨時目錄權限,一切正常。不經意間想起這個vps只有5G空間,linux系統(tǒng)占用1.5G,該論壇圖片甚多,莫非……
鍵入如下命令:
[root@centos www]# df -m
Filesystem?????????? 1M-blocks????? Used Available Use% Mounted on
/dev/sda1???????????????? 5040????? 4784???????? 0 100% /
看來是服務器空間被吃完了!馬上刪除一些沒用的數(shù)據(jù),估計是這幾天論壇圖片又傳了好多,導致空間吃緊了!下一步就要去升級該vps了!硬件問題,這也實在不是我能解決的了!
而網(wǎng)上搜索來的答案中也并非沒有用,比如修復表的操作,看到得出錯是某個表出現(xiàn)問題提示需要修復,如下:
Error: Table '.\discuz\[Table]threads' is marked as crashed and should be repaired
而經過phpmyadmin無法修復的話,可以考慮上傳discuz官方的tools進行修復試試看。當然,一切操作記得盡可能做個備份,以防萬一!
可以看到,問題出在connect函數(shù),即連接問題。
出現(xiàn)數(shù)據(jù)庫連接問題,一般是這幾種情況:
- 數(shù)據(jù)庫服務沒有起來
- 數(shù)據(jù)庫配置沒有配置正確
檢查數(shù)據(jù)庫服務狀態(tài)
直接執(zhí)行service mysql status
可以看到mysql服務的運行狀態(tài),如果看到下面的結果,說明數(shù)據(jù)庫沒有起來,請手動重啟數(shù)據(jù)庫。
曾經出現(xiàn)過某些同學,不小心將/etc/hosts
中localhost
解析到127.0.0.1
的那行刪掉了,而config.inc.php
中host
的配置是localhost
,導致php鏈接數(shù)據(jù)庫的時候,無法解析localhost
,導致連接失敗。大家也可以看看
解決辦法:
如果您的服務器是獨立主機強烈建議使用命令行方式進行修復:
修復前將mysql服務停止。
如果是Win主機,打開命令行方式,然后進入到mysql的/bin目錄。
執(zhí)行myisamchk -r d:\mysql\data\discuz\*.MYI
其中d:\mysql\data\discuz\換成您的數(shù)據(jù)庫所在路徑。
如果是類Unix主機,直接使用myisamchk -r 數(shù)據(jù)庫目錄\*.MYI
即可。
大概說一下檢查的方法
檢查語法錯誤,可以用echo輸出變量,看看你要插入的數(shù)據(jù)是否出現(xiàn)問題
用mysql_error檢查sql語句執(zhí)行錯誤,echo出來
檢查數(shù)據(jù)庫建立的是否正確,是否和插入語句一一對應,NOT NULL部分要注意
檢驗mysql_query($sql,$conn);的返回值,echo出來,看看是否正常
如果以上方法都找不出來,還有可能是
你電腦里裝了多個mysql,端口改過嗎(比如你之前學習mysql,安裝了一個,后來又安裝一個wamp學php,那這兩個端口可能會沖突,檢查一下,在配置文件my.ini里Ctrl+F查找3306或者port,把端口全改掉,這個時候你的php的配置文件php.ini里還有一個默認訪問端口mysql.default_port = 3306,也改掉)
真的沒有成功嗎?一般mysql數(shù)據(jù)庫操作是用mysql_affected_rows()來檢測操作是否成功把。
如果確定數(shù)據(jù)庫中沒有這條數(shù)據(jù),在mysql里直接操作沒問題說明表名和列名沒問題,但庫名確定沒弄錯嗎?
字符編碼不對,插入數(shù)據(jù)應該只會是亂碼,也不會插不進去。
數(shù)據(jù)沒重復吧= =
真的沒有成功嗎?一般mysql數(shù)據(jù)庫操作是用mysql_affected_rows()來檢測操作是否成功把。
如果確定數(shù)據(jù)庫中沒有這條數(shù)據(jù),在mysql里直接操作沒問題說明表名和列名沒問題,但庫名確定沒弄錯嗎?
字符編碼不對,插入數(shù)據(jù)應該只會是亂碼,也不會插不進去。
數(shù)據(jù)沒重復吧= =
1,你的數(shù)據(jù)庫建立了嗎?表建立了嗎?
2,表字段與插入數(shù)據(jù)相符嗎?
3,字段類型和插入數(shù)據(jù)的類型一致嗎?
4,sql語句規(guī)范嗎?
個人覺得3和4的可能性是比較大的,regdate如果也是字符串類型的話,你的new()就必須加單引號了。這里沒有看到你建立的數(shù)據(jù)表的數(shù)據(jù)。單純只是一個插入失敗,反而看不到問題所在,“插入失敗”過于籠統(tǒng)。
我在“UTF8字符集的表怎么直接轉UTF8MB4”一文中介紹了如何把表字符集由UTF8直接轉換成UTF8MB4的幾種方法。
1、只修改字符集(使用默認校驗集)
yejr@imysql.com> alter table t1 convert to character set utf8mb4
2、同時修改表字符集和校驗集
yejr@imysql.com> alter table t1 convert to character set utf8mb4 collate utf8mb4_bin;
3、只修改某列的字符集
yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 not null default ‘’
4、同時修改某列的字符集和校驗集
yejr@imysql.com> alter table t1 modify c1 varchar(20) character set utf8mb4 collate utf8mb4_unicode_ci not null default ‘’
好了,有個字符集為UTF8MB4的表中想存儲各類不同字符集的文本,有哪些注意事項億避免亂碼?
如果是通過WEB接口存儲數(shù)據(jù),則建議在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(針對大多數(shù)文本,其實UTF8字符集就足夠存儲的了)。
0 Comments.