mysql函数

SQL注入详解

北战南征 提交于 2020-02-17 04:11:45
一:什么是sql注入   SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二: SQL注入攻击的总体思路     1:寻找到SQL注入的位置   2:判断服务器类型和后台数据库类型   3:针对不同的服务器和数据库特点进行SQL注入攻击 三: SQL注入攻击实例 String sql = "select * from user_table where username= ' "+userName+" ' and password=' "+password+" '"; --当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= '’or 1 = 1 -- and password='’ """ --分析SQL语句: --条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功; --然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都--能正确执行,用户轻易骗过系统,获取合法身份。 --这还是比较温柔的,如果是执行 SELECT * FROM user_table WHERE username='' ;DROP DATABASE (DB

MySQL核心知识

ⅰ亾dé卋堺 提交于 2020-02-16 23:45:34
一、查询操作 1、去重:select后面加distinct 2、查询多个字段作为一个字段返回 select后面加concat(‘字段名’,‘字段名’) 3、模糊查询 1》like 特点:一般和通配符搭配使用 通配符: % 任意多个字符 _任意单个字符 有时需要用到转义符: 2》between and 包含临界值 两个临界值不要调换顺序 3》in 小括号内部不能用通配符 4》is null/ is not null =号不能判断是否为null值,但是is null和is not null可以 5》安全等于 <=> 既可以判断字符数字型,也可以判断null 4、查询排序 asc升序 desc降序 5、常见函数 类似与Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。 分类: 1》、单行函数 字符函数 : length: 获取参数值的字节个数(utf8下英文占一个字节,汉字占三个字节)。 concat: 拼接字符串。 upper转化为大写, lower转化为小写: substr、substring:截取字符串 注意:MySQL 中字符串索引从1开始 instr:返回字串第一次出现的索引,如果找不到返回0。 trim:去掉某个字符串的前后空格,也可以去掉字符串前后指定值。 lpad和rpad: replace:替换(把周芷若替换为赵敏) 数值函数: 日期函数: 查询相差天数

MySQL学习笔记(5)

牧云@^-^@ 提交于 2020-02-16 21:23:56
分组数据: || 为了前面提到使用聚集函数进行汇总操作,我们有时需要分组操作去配合数据汇总 || 汇总数据和分组数据相互配合: 举个例子:汇总每个id下的有几行 SELECT c_id , COUNT ( * ) AS c_num FROM bases GROUP BY c_id || GROUP BY 子句指示MySQL按c_id 排序并分组数据,可以看作表被分成了子表,然后COUNT(*)返回每个子表的行数 || 使用GROUP BY 后,聚集函数对每个组分别进行聚集,而不是对整个表进行聚集 (个人理解:可以把分组看成子表 ) || GROUP BY子句的使用规定: |有关GROUP中的列: || GROUP BY可以包含多个列,以进行嵌套分组,聚集函数在最后一层嵌套进行聚集 || SELECT检索的每个列都必须在GROUP BY中给出( 聚集语句除外) || GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(聚集函数除外),即不能使用别名。(如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式)。 |有关GROUP的顺序: || GROUP BY子句必须出现在WHERE过滤之后,HAVING过滤之前,ORDER BY排序子句之前。(因为GROUP子句包含有简单的排序功能!) (我们使用WHERE来过滤行,过滤完行之后分组

MySQL学习(19)|流程控制结构

◇◆丶佛笑我妖孽 提交于 2020-02-16 19:19:07
流程控制结构 顺序、分支、循环 描述 顺序结构 程序从上往下依次执行 分支结构 程序从两条或多条路径中选择一条去执行 循环结构 程序在满足一定条件的基础上,重复执行一段代码 一、分支结构 1.if函数 语法:IF(条件,值1,值2) 功能:实现双分支 应用在BEGIN END中或外面 2.case结构 语法: 情况1:类似于switch,一般实现等值判断 CASE 变量或表达式 WHEN 值 1 THEN 返回的值 1 或语句 1 ; WHEN 值 2 THEN 返回的值 2 或语句 2 ; . . . ELSE 语句n ; END 情况2:一般实现区间判断 CASE WHEN 条件 1 THEN 返回的值 1 或语句 1 ; WHEN 条件 2 THEN 返回的值 2 或语句 2 ; . . . ELSE 语句n ; END 特点: 可以 作为表达式 ,嵌套在其他语句中使用,可以放在任何地方,BEGINEND中或BEGINEND的外面 语法 位置 情况1 CASE 表达式 WHEN 值1 THEN 值1 WHEN 值2 THEN 值2 … ELSE 值n END; BEGIN END中,BEGIN END 外面 情况2 CASE WHEN 值1 THEN 条件1 WHEN 值2 THEN 条件2 … ELSE 值n END; BEGIN END中,BEGIN END 外面 可以

mysql 过程和函数的使用方法

爱⌒轻易说出口 提交于 2020-02-15 08:55:16
两者区别: 存储函数必须有返回值,且仅返回一个结果值 存储过程可以没有返回值,但是能返回结果集(out,inout) 存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。 一、过程 CREATE DEFINER = ` root ` @`localhost` PROCEDURE ` NewProc2 ` ( IN ` mydate ` datetime , OUT ` strDate ` varchar ( 50 ) ) BEGIN SELECT DATE_FORMAT ( mydate , '%y年%m月%d日' ) INTO strDate ; END 执行: CALL NewProc2 ( now ( ) , @str ) ; SELECT @str ; 二.函数 CREATE DEFINER = ` root ` @`localhost` PROCEDURE ` NewProc3 ` ( IN ` num ` int ) BEGIN DECLARE number INT DEFAULT 1 ; WHILE number < num DO INSERT INTO tab

高校学生学籍系统C++&mysql

半世苍凉 提交于 2020-02-15 01:01:48
/* C++程序设计实践教学环节任务书 一、题目:高校学籍管理系统 二、目的与要求 1. 目的: 1.掌握C++语言基本知识及其编程方法 2.掌握类和对象的基本概念与用法 3.掌握面向对象中的继承与多态等面象对象特性 4.掌握文件流的基本操作 2. 要求 基本要求: (1)要求利用面向对象的方法以及C++的编程思想来完毕系统的设计; (2)要求在设计的过程中,建立清晰的类层次。 (3)在系统中至少要定义8个类,每一个类中要有各自的属性和方法。 (4)在系统的设计中,要求使用面向对象的继承与多态 */ #include <iostream> #include <stdlib.h> #include <string> #include <winsock2.h> #include <mysql.h> #pragma comment(lib,"ws2_32") #pragma comment(lib,"libmysql") using namespace std; class Student { int id; char name[200]; char sex[100]; char min_zu[220]; char ji_guan[330]; char sheng_fen_zheng_hao[20]; char QQ[20]; char phone[20]; int score;

Mysql的函数使用方法

你说的曾经没有我的故事 提交于 2020-02-14 02:45:20
今天有点临时需求要计算一张表的结果,不想写代码,想到了mysql的自定义函数。碰到了很多问题,为了方便一下使用,在此记录一下。 需求:一张表中,有比分,需要查询出比赛id和比赛结果。 分析: 单表查询没啥的,困难就困难在怎么判断比分之后返回想要的结果。 这里我把比赛结果分别定义代号,1主场胜、2平局、3客场胜 函数逻辑: 接收两个参数,判断参数的大小,分别返回结果。 实现: Navicat操作: navicat for mysql 工具内--创建函数 这里分别是存储过程和函数,我们选择函数 设置参数,这里的参数是接收的参数,例如 count(id) 接收一个参数 下一步,设置返回类型 点击完成即可。会出现以下界面 现在开始在BEGIN ..END;;中间写逻辑,具体语法需要百度。 我这里主要是if...elseif..else的逻辑,代码如下: 保存--getMatchResult。如果语法有错误,保存会报错,根据提示信息去查找错误。 使用函数: 我这里为了方便,直接写了两个参数,结果跟预想一样。 第一个参数是主场分数,第二个参数是客场分数, 3表示客场胜。 Mysql 创建函数 进入mysql shell,因为中间有很多分号,所以需要使用delimiter分界。该命令表示,把默认的分号执行改成其他符号执行。 这里使用demiter修改分解符为// ,如果还是使用分号分界则报错了

PHP漏洞全解

一世执手 提交于 2020-02-13 21:54:53
针对PHP的网站主要存在下面几种攻击方式: 1、命令注入(Command Injection) 2、 eval 注入( Eval Injection) 3、客户端脚本攻击(Script Insertion) 4、跨网站脚本攻击(Cross Site Scripting, XSS) 5、SQL注入攻击(SQL injection) 6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7、Session 会话劫持(Session Hijacking) 8、Session 固定攻击(Session Fixation) 9、HTTP响应拆分攻击(HTTP Response Splitting) 10、文件上传漏洞(File Upload Attack) 11、目录穿越漏洞(Directory Traversal) 12、远程文件包含攻击(Remote Inclusion) 13、动态函数注入攻击(Dynamic Variable Evaluation) 14、URL攻击(URL attack) 15、表单提交欺骗攻击(Spoofed Form Submissions) 16、HTTP请求欺骗攻击(Spoofed HTTP Requests) 命令注入攻击 PHP中可以使用下列5个函数来执行外部的应用程序或函数 system、 exec 、

MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍

*爱你&永不变心* 提交于 2020-02-13 02:19:15
MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍 ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式,这个表达式的值可能在经过group by操作后变成undefined,例如: 1 2 3 4 5 6 7 8 9 10 11 12 mysql > create database test charset utf8mb4 ; mysql > use test ; mysql > create table tt ( id int , count int ) ; mysql > insert into tt values ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 3 ) , ( 2 , 4 ) ; mysql > select * from tt group by id ; + -- -- -- + -- -- -- - + | id | count | + -- -- -- + -- -- -- - + | 1 | 1 | | 2 | 3 | + --

mysql中FIND_IN_SET的使用方法

爱⌒轻易说出口 提交于 2020-02-12 21:06:04
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。 FIND_IN_SET(str,strlist)函数 str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 下面举例说明 test表中有如下字段及值 下面我想查询area中包含”1″这个参数的记录 SELECT * from test where FIND_IN_SET(‘1’,area) 返回值 下面查询btype字段中包含”15″这个参数的值 SELECT * from test where FIND_IN_SET(‘15’,btype) 返回值 下面查询btype字段中包含”5″这个参数的值 SELECT * from test where FIND_IN_SET(‘5’,btype) 返回值为null,因为btype中没有”5”这个值,它不同于 like 模糊查询,它是以“,”来分隔值 接下面查询btype字段中包含”20″这个参数的值 SELECT * from test where FIND_IN_SET(‘20’