所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
第一种方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php $dsn = "mysql:dbname=study;host=localhost" ; $pdo = new PDO( $dsn , "root" , "root" ); //写一个预处理语句 $sql = "insert into class values(?,?)" ; //将预处理语句扔到服务器等待执行,返回PDOStatement对象 $stm = $pdo ->prepare( $sql ); //第二次将变量(参数)扔到服务器的SQL语句相应位置,给预处理语句绑定参数 $stm ->bindParam(1, $Sclass ); $stm ->bindParam(2, $cla ); $Sclass = "7" ; $cla = "七班" ; //执行 $stm ->execute(); |
第一种方法简写
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php $dsn = "mysql:dbname=study;host=localhost" ; $pdo = new PDO( $dsn , "root" , "root" ); //写一个预处理语句 $sql = "insert into class values(?,?)" ; //将预处理语句扔到服务器等待执行,返回PDOStatement对象 $stm = $pdo ->prepare( $sql ); //定义索引数组 $arr = array ( "8" , "八班" ); //执行 $stm ->execute( $arr ); |
第二种方法
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php $dsn = "mysql:dbname=study;host=localhost" ; $pdo = new PDO( $dsn , "root" , "root" ); //预处理语句 $sql = "insert into class VALUES (:Sclass,:cla)" ; $stm = $pdo ->prepare( $sql ); //造一个数组 $arr = array ( "Sclass" => "10" , "cla" => "十班" ); //执行 $stm ->execute( $arr ); |
举例,第二种情况简单,建议应用第二种方法
1
2
3
4
5
6
7
8
|
<body xmlns= "http://www.w3.org/1999/html" > <h1>添加数据</h1> <form action= "pdoycl5.php" method= "post" /> <div>代号:<input type= "text" name= "Sclass" > </div> <div>班级:<input type= "text" name= "cla" > </div> <input type= "submit" value= "添加" > </form> </body> |
1
2
3
4
5
6
7
8
|
<?php $dsn = "mysql:dbname=study;host=localhost" ; $pdo = new PDO( $dsn , "root" , "root" ); //预处理语句 $sql = "insert into class VALUES (:Sclass,:cla)" ; $stm = $pdo ->prepare( $sql ); //执行 $stm ->execute( $_POST ); |