mysql query error DZ程序出现mysql query error解决方法

mysql query error翻译成中文的意思是:MySQL查询错误

最直接简单的方法是:

到数据库高级管理,也就是PHPMYADMIN里面,全选数据库点击修复即可,如果你不知道数据库怎么进或者PHPMYADMIN怎么进,联系你的空间商或者懂的朋友,让他帮你修复即可解决。

 

今天discuz论坛出现问题,如下:

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开始搜索,得出理论性结果如下:

  1. 该问题也会发生在windows服务器上(C:\WINDOWS\TEMP\MY32),亦是跟临时目录有关
  2. 该问题跟论坛采用“首页四格”插件有关

解决方法如下:

  1. 采用phpmyadmin对出问题的表进行repair(修复),独立主机亦可用mysql工具修复
  2. 采用discuz tools进行数据库修复(链接:TOOLS 2009贺岁版)

而实际操作中,我先采用了重启服务器(自有vps服务器,linux系统),系统启动完成后依次启动php-cgi、nginx、mysql,重新打开论坛,一切正常。过了2个小时,论坛又出现那个问题,从问题上看是写入数据出错。检查临时目录权限,一切正常。不经意间想起这个vps只有5G空间,linux系统占用1.5G,该论坛图片甚多,莫非……

键入如下命令:

[root@centos www]# df -m
Filesystem           1M-blocks      Used Available Use% Mounted on
/dev/sda1                 5040      4784         0 100% /

看来是服务器空间被吃完了!马上删除一些没用的数据,估计是这几天论坛图片又传了好多,导致空间吃紧了!下一步就要去升级该vps了!硬件问题,这也实在不是我能解决的了!

而网上搜索来的答案中也并非没有用,比如修复表的操作,看到得出错是某个表出现问题提示需要修复,如下:

Error: Table '.\discuz\[Table]threads' is marked as crashed and should be repaired

而经过phpmyadmin无法修复的话,可以考虑上传discuz官方的tools进行修复试试看。当然,一切操作记得尽可能做个备份,以防万一!

可以看到,问题出在connect函数,即连接问题。

出现数据库连接问题,一般是这几种情况:

  1. 数据库服务没有起来
  2. 数据库配置没有配置正确

检查数据库服务状态

直接执行service mysql status可以看到mysql服务的运行状态,如果看到下面的结果,说明数据库没有起来,请手动重启数据库。

曾经出现过某些同学,不小心将/etc/hostslocalhost解析到127.0.0.1的那行删掉了,而config.inc.phphost的配置是localhost,导致php链接数据库的时候,无法解析localhost,导致连接失败。大家也可以看看

解决办法:
如果您的服务器是独立主机强烈建议使用命令行方式进行修复:
修复前将mysql服务停止。
如果是Win主机,打开命令行方式,然后进入到mysql的/bin目录。
执行myisamchk -r d:\mysql\data\discuz\*.MYI
其中d:\mysql\data\discuz\换成您的数据库所在路径。
如果是类Unix主机,直接使用myisamchk -r 数据库目录\*.MYI
即可。

大概说一下检查的方法
检查语法错误,可以用echo输出变量,看看你要插入的数据是否出现问题
用mysql_error检查sql语句执行错误,echo出来
检查数据库建立的是否正确,是否和插入语句一一对应,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数据库操作是用mysql_affected_rows()来检测操作是否成功把。

如果确定数据库中没有这条数据,在mysql里直接操作没问题说明表名和列名没问题,但库名确定没弄错吗?
字符编码不对,插入数据应该只会是乱码,也不会插不进去。
数据没重复吧= =

真的没有成功吗?一般mysql数据库操作是用mysql_affected_rows()来检测操作是否成功把。

如果确定数据库中没有这条数据,在mysql里直接操作没问题说明表名和列名没问题,但库名确定没弄错吗?
字符编码不对,插入数据应该只会是乱码,也不会插不进去。
数据没重复吧= =

检查一下问题:
1,你的数据库建立了吗?表建立了吗?
2,表字段与插入数据相符吗?
3,字段类型和插入数据的类型一致吗?
4,sql语句规范吗?
个人觉得3和4的可能性是比较大的,regdate如果也是字符串类型的话,你的new()就必须加单引号了。这里没有看到你建立的数据表的数据。单纯只是一个插入失败,反而看不到问题所在,“插入失败”过于笼统。

我在“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接口存储数据,则建议在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(针对大多数文本,其实UTF8字符集就足够存储的了)。

更多
  • 该日志由 于2017年12月11日发表在 行业新闻 分类下, 你可以发表评论,并在保留原文地址 及作者的情况下引用到你的网站或博客。
  • 本文链接: mysql query error DZ程序出现mysql query error解决方法 | 帮助信息-动天数据
  • 文章标签:
  • 版权所有: 帮助信息-动天数据-转载请标明出处
  • 【上一篇】 【下一篇】

    0 Comments.