解决方案如下:
1. 进入管理mysql的phpmyadmin
2. 在左则选中自己的数据库
3. 在右则勾选中错误信息中的那个’wxpetdata’表
4. 滚动屏幕到下面,有个下拉菜单(With selected:),选择”Repair table”
从报错的字面意思来讲,你程序里使用的mysql_query()函数,并没有定义。建议你先去找找这个函数在哪里定义的,为什么你的编译器没找到这个函数。
追问
麻烦提示一下,这个定义一般是要去哪里找?编辑时间 2018-12-07
您好,有可能是因为php版本的原因,这个问题概括起来说就是你的PHP不支持mysql_connect()函数。为什么呢?这是由于PHP是一种模块化的设计,除了核心的内容,其他都是可选的。之所以不支持,是因为在编译PHP时没有加入对MYSQL数据库的支持。
编辑时间 2019-03-28这样写INSERT INTO files (uname,name,desc,fileid,fname) VALUES ("$uname","$name","$desc","$fileid","$fname");单引号不解析变量的
编辑时间 2019-07-29
PHP中如果不判断sql执行是否成功,就弹出成功提示框,往往会造成虚假注册,实际表单内容没有提交进入数据库。判断sql语句是否执行成功主要用到的函数为mysql_affected_rows() 返回前一次 MySQL 操作所影响的记录行数。
执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1。 如果最近一次操作是没有任何条件(WHERE)的 DELETE 查询,在表中所有的记录都会被删除,但本函数返回值在 4.1.2 版之前都为 0。 当使用 UPDATE 查询,MySQL 不会将原值与新值一样的列更新。这样使得 mysql_affected_rows() 函数返回值不一定就是查询条件所符合的记录数,只有真正被修改的记录数才会被返回。 下面看两个例子:例一:
$rs=MySQL_query($sql);
if(mysql_affected_rows())
echo "sql执行成功";elseecho "sql执行失败";例二:<?php/* 连接数据库 */
mysql_pconnect("localhost", "mysql_user", "mysql_passWord") or
die ("Could not connect" . mysql_error());
mysql_select_db("mydb");
/* Update 记录 */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
什么是事务?
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务
注意:mysql数据支持事务,但是要求必须是innoDB存储引擎
解决这个问题:
mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全
如何使用:
(1)在执行sql语句之前,我们要开启事务 start transaction;
(2)正常执行我们的sql语句
(3)当sql语句执行完毕,存在两种情况:
1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ
2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销
(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎)
mysql> create table bank(name varchar(20),money decimal(5,1))engine=innodb defau
lt charset=utf8;
mysql> inset into bank values('shaotuo',1000),('laohu',5000);
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------没有成功“回滚”执行rollback
mysql> start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update bank set moey=money-500 where name='laohu';
ERROR 1054 (42S22): Unknown column 'moey' in 'field list'
mysql> rollback; //只要有一个不成功,执行rollback操作
Query OK, 0 rows affected (0.01 sec)
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------成功之后 进行commit操作
mysql> start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update bank set money=money-500 where name='laohu';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> commit; //两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响)
Query OK, 0 rows affected (0.05 sec)
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1500.0 |
| laohu | 4500.0 |
+---------+--------+
INSERT INTO msg(title,contents,dates) VALUES ($title,$cons,now())
将字段名两边的单引号去掉就没问题了,亲测成功!希望能帮到你。
1. 数据库版本:阿里云RDS MySQL5.1
mysql> select @@version;
+-------------------------------+
| @@version |
+-------------------------------+
| 5.1.61-Alibaba-rds-201404-log |
+-------------------------------+
1 row in set (0.00 sec)
2. 测试的表结构信息
mysql> show create table tb2\G
*************************** 1. row ***************************
Table: tb2
Create Table: CREATE TABLE `tb2` (
`a` varchar(255) DEFAULT NULL,
`b` varchar(255) DEFAULT NULL,
`c` varchar(255) DEFAULT NULL,
`d` varchar(1000) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
3. 测试加索引
(1)添加单列索引,能够添加成功(报出warning),但实际添加的是前缀索引。
mysql> alter table tb2 add index idx1 (d);
Query OK, 0 rows affected, 2 warnings (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show warnings;
+---------+------+----------------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------------+
| Warning | 1071 | Specified key was too long; max key length is 1000 bytes |
| Warning | 1071 | Specified key was too long; max key length is 1000 bytes |
+---------+------+----------------------------------------------------------+
2 rows in set (0.00 sec)
表结构信息:
mysql> show create table tb2\G
*************************** 1. row ***************************
Table: tb2
Create Table: CREATE TABLE `tb2` (
`a` varchar(255) DEFAULT NULL,
`b` varchar(255) DEFAULT NULL,
`c` varchar(255) DEFAULT NULL,
`d` varchar(1000) DEFAULT NULL,
KEY `idx1` (`d`(333))
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
(2)添加组合索引,会执行失败。
mysql> alter table tb2 add index idx1 (a,b);
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
4. 分析
myisam存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。
主要字符集的计算方式:
latin1 = 1 byte = 1 character
uft8 = 3 byte = 1 character
gbk = 2 byte = 1 character
Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:Windows 下。
Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下。
大家也可以用下面的命令查一下(如果不是LNMP,路径可能不同):
代码如下
du -h --max-depth=1 /usr/local/mysql/var/*
如果看到大量大文件,且名为 mysql-bin.000014 这样的,说明你也需要关闭日志文件,因为你不知道哪一天它们会把你VPS的硬盘塞满。
用WINSCP把这些文件删除吧。
如何关闭:
代码如下
vi /etc/my.cnf
找到:
代码如下
log-bin=mysql-bin
binlog_format=mixed
将这两行注释掉,前面加上#
然后保存。
最后用下面的指令重启下LNMP。收工。
代码如下
/root/lnmp restart
linux中还有另一种办法
关闭mysql日志功能
1、进去mysql
代码如下
[root@localhost ~]# mysql -u root -p
Enter password:
2、查看日志文件
代码如下
mysql> show master logs;
会出现好多mysql-bin.0000*文件哦 这些都是日志文件
注:如果出现ERROR 1381 (HY000): You are not using binary logging 则说明你的日志文件已经关闭啦
3、关闭mysql日志文件
代码如下
mysql> reset master; //关闭日志
mysql> show master logs; //查看是否还有日志
mysql> exit;
Bye
4、修改mysql配置文件my.cnf。找到log-bin=mysql-bin、binlog_format=mixed 在前面加注释即可
5、重新启动mysql ok