MYSQL5.7版本sql_mode=only_full_group_by问题

报错信息:

[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现以上错误时进放MySQL命令行查看一下sql_mode值:

select @@global.sql_mode

如结果如下:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

则需要重新设置sql_mode, 在 MySQL命令行执行下面的命令:

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

出错原因:

mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就出现该错误。

Mysql导入数据库命令

一般情况下我们可以通过mysqldump 工具导入整个数据库备份文件:

shell> mysqldump db_name > backup-file.sql

也可以通过下面的命令进行sql文件的导入:

UNIX:
shell> mysql db_name < backup-file.sql
Windows:
mysql -p -u[user] [database] < backup-file.sql
Mysql命令行:
mysql> use db_name;
mysql> source backup-file.sql;

如何在PHP防止数据库SQL注入

SQl注入的危害非常的大,下面这个示例就是一个典型的注入点,代码未对用户所提交的数据进行合法性检查。

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");

用户可通过提交类似 value'); DROP TABLE table;-- 这样的代码,运行时将执行下面的非法代码

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')

对数据安全性以及有效性破坏非常的大,在开发过程中一定要对用户提交信息进行合法性检查,针对PDO和MySQLi两种不同的数据库连接方式有如下两种处理办法。 Continue reading “如何在PHP防止数据库SQL注入”

Mysql中批量更改数据

这几天又要采集大量数据,太懒的缘故,我就把以前的旧数据库COPY了一份。
不过发现有几列数据需要更新。
语法:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 …]
[WHERE where_definition]
[ORDER BY …]
[LIMIT row_count]
UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。 Continue reading “Mysql中批量更改数据”