一,在实际开发中使用预处理语句来操作数据库可以彻底消灭SQL注入的攻击;所以预处理还是比较重要的;下面的代码是使用预处理语句来对数据库进行查询和更新的操作;预处理操作的主要环节如下:
1,生成预处理语句:$sql="";
2,生成该语句的预处理对象 :涉及prepare()方法;
3,生成对象成功进行参数绑定:涉及bind_param():方法 s代表字符串 i代表整数 d 代表浮点数
4,执行操作:execute();成功返回 true 失败返回false();
其中要注意的是查询操作中结果集的回去get_result();获取的结果集也是一个对象;调用结果集对象的方法
fetch_assoc();即可获取到结果集中的数据
<?php //连接数据库,其中mysql.php是已经写好了的数据库连接文本使用的是面向对象的数据库连接生成了$mysqli对象; require 'mysql.php'; //生成预处理查询语句;1,首先第一个任务是查询数据库中id=13的数据 $sql="SELECT * FROM `user1` WHERE `id` = ? "; //查询的用户id 写在数组$data1中; $data1=['id'=>'13']; $mysqli_stmt = $mysqli->prepare($sql);//生成预处理对象:利用$mysqli->prepare()方法 //参数绑定:s代表字符串 i 代表整数 d 代表浮点 $mysqli_stmt->bind_param( 'i',$data1['id']); //执行预处理语句;execute()方法,成功放回true;失败返回false if($mysqli_stmt->execute()){//如果查询成功,则需要获取到查询的数据,在对查询的数据进行修改 $result=$mysqli_stmt->get_result();//获取到查询的结果集 $rows=$result->fetch_assoc();//获取到查询数据在一维数组$rows中; //生成更新操作的预处理语句 $sql2="UPDATE `user1` SET `name`=?,`password`=sha1(?),`email`=? WHERE `id`=?"; //生成一个更新操作的预处理对象$stmt; $stmt=$mysqli->prepare($sql2); //将要更新的数据写在数组$data 中; $data=['name'=>'ANDA','password'=>'123','email'=>'ande@qq.com']; //进行参数绑定,注意前后顺序 $stmt->bind_param('sssi',$data['name'],$data['password'],$data['email'], $rows['id']); if($stmt->execute()){//执行更新操作成功返回true,失败则返回false; if($stmt->affected_rows==1){//如果更新成功则数据表会有一条记录被影响,因为在上面我们只更新了一条数 //据 echo '<h2 style="color:green">更新成功</h2>'; }else{ echo '<h2 style="color:green">没有数据被更新</h2>'; } }else{ echo '<h2 style="color:red">更新失败'.$stmt->error.'</h2>'; } }else{ echo '<h2 style="color:red">查询失败'.$mysql_stmt->error.'</h2>'; }?>