SQL注入问题及事务

Posted Java大数据资源社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入问题及事务相关的知识,希望对你有一定的参考价值。

在这里我给大家数一下数据库中的常见问题,有时候我们在测试数据的时候会发现当我们在文本框中输入sql代码时数据库接收数据则会收到影响,这就是我们常说的sql注入问题,在这里我们常用的解决方案就是使用PrepareStatement对象替代Statement对象接收页面数据,下面我在这里给大家详细的说一下。

 

用户名输入: tom'--即可将sql语句改变为

SELECT * FROM users NAME = 'tom' AND PASSWORD ='1234';

SELECT * FROM users NAME ='tom' --'AND PASSWORD = '1234';

后方的密码部分将会被备注不起作用,此问题称为sql的注入问题

本质原因是让用户参与到了sql语句的编写中。

statement的对象功能比较单一,仅仅将sql语句运输到数据库执行

**PrepareStatement比较勤快

PerpareStatement会先进行一次sql语句的运输,例如

SELECT * FROM users NAME = ? AND PASSWORD =?;

此语句先进行编译,并无法执行,当PerpareStatement第二次将用户的提交的数据传递过来即可运行

当我们在实际操作时也会遇到这么一个问题,例如我们遇到转账操作时,此时我们需要扣一个人的账户加到另一个账户中去,如果出现了意外情况,此时如果只操作了一条sql语句,就会对一方造成损失,因此我们需要保证两条sql语句有一条执行则必须执行另一条,否则两条都不执行。这里我们需要了解一个新的东西,就是事务,以下是我对事务的理解及详细介绍。

 

建表语句

CREATE TABLE t_account(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

balance DOUBLE(6,2)

)

-- tomjerry转账100元的事务

-- 开启事务

START TRANSACTION;

-- tom的账户扣除100

UPDATE t_account SET balance = balance-100 WHERE id=1;

-- jerry的账户添加100

UPDATE t_account SET balance = balance+100 WHERE id=2;

-- 如果成功则提交事务

COMMIT;

-- 如果失败则回滚事务

ROLLBACK;

 

执行结果显示

[SQL] START TRANSACTION;

受影响的行: 0

时间: 0.000ms

 

[SQL]

UPDATE t_account SET balance = balance-100 WHERE id=1;

受影响的行: 1

时间: 0.001ms

 

[SQL]

UPDATE t_account SET balance = balance+100 WHERE id=2;

受影响的行: 1

时间: 0.001ms

 

[SQL]

COMMIT;

受影响的行: 0

时间: 0.069ms

 

[SQL]

ROLLBACK;

受影响的行: 0

时间: 0.000ms

 

mysql中默认所有的sql语句都在事务中执行,不开启事务的话两条语句会产生两个事务,

当语句执行完成并没有问题的时候,事务会自动提交。

****开启事务则只产生一个事务,通过 start transaction来开启事务,手动控制每条sql语句执

行完成都不会自动提交

****事务的结束

1.commit 提交:语句执行成功则提交

2.rollback 回滚:语句执行失败则回滚事务

3.断网,宕机。。相当于自动回滚

4.超时。。自动回滚

5.DDL事务会自动提交

 

——详解DDLDCLDML

DDL数据定义语言

CREATE  DROP  ALTER  TRANSACTION

 

DCL数据控制语言

GRANK  COMMIT  RLLBACK

 

DML (数据操作语言)

INSERT  UPDATE  DELETE

 |-DQLDQL分属于DMLSELECT


以上是关于SQL注入问题及事务的主要内容,如果未能解决你的问题,请参考以下文章

sql注入,预编译和事务

游标操作/pymysql事务/sql注入/索引

MySQL第43天------视图SQL注入问题事务存储过程

什么是SQL注入及SQL注入工具

如何防范SQL注入漏洞及检测

SQL注入漏洞简介原理及防护