本例为预处理操作,预处理操作主要作用为防止SQL注入,时SQL语句与数据脱离
写操作(以新增为例):
$data = ['name'=>'陈真','email'=>'809332774@qq.com','password'=>'223456'];
//用?代替数据
$sql = "INSERT user1 SET name=?,email=?,password=sha1(?)";
//准备sql语句生成 mysql_stmt对象
$mysql_stmt = $mysql->prepare($sql);
//绑定参数 bind_param(type,data);
$mysql_stmt->bind_param("sss",$data['name'],$data['email'],$data['password']);
//执行
if($mysql_stmt->execute()){
echo "成功插入".$mysql_stmt->affected_rows."条数据,新增主键ID为".$mysql_stmt->insert_id;
}else{
echo "插入失败,错误为: $mysql_stmt->error";
}
$mysql->close(); 总结:
1.$mysql_stmt = $mysql->prepare($sql) //生成$mysql_stmt对象 2.$mysql_stmt->bind_param(type,data) //type对照data排列先后 列出数据类型 i整形 s字符 3.$mysql_stmt->execute(); success: $mysql_stmt->afftect_rows .insert_id error : $mysql_stmt->error
print_f($mysql_stmt);生成如下对象:
mysqli_stmt Object ( [affected_rows] => 0 [insert_id] => 0 [num_rows] => 0 [param_count] => 3 [field_count] => 0 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 1 )
读操作(查询):
$sql = "SELECT `id`,`name`,`email` FROM user1 WHERE id=? AND name=?";
$data = [1,"wangkai"];
//绑定
$mysql_stmt = $mysql->prepare($sql);
$mysql_stmt->bind_param('is',$data[0],$data[1]);
if($mysql_stmt->execute()){
//存储结果集
$mysql_stmt->store_result();
//判断结果集数量
if($mysql_stmt->num_rows>0){
echo '查询到'.$mysql_stmt->num_rows.'条数据';
//绑定结果集对应的字段
$mysql_stmt->bind_result($id,$name,$email);
//fetch()取出一条数据,fetchA
while($mysql_stmt->fetch()){
echo $id.$name.$email;
};
$mysql_stmt->free_result();
$mysql_stmt->close();
}else{
echo '没有查询到数据';
}
}else{
echo '查询失败请检查'.$mysql_stmt->error;
} 总结:
1.$mysql_stmt = $mysql->prepare 2.$mysql_stmt->bind_param(); 3.$mysql_stmt->store_result();//存储结果集 3.1 $mysql_stmt->num_rows();//结果集数量 5.$mysql_stmt->bind_result(变量);//为结果集绑定变量 6.$mysql_stmt->fetch() //输出变量,每次输出单条
准备->绑定参数->存储结果集->结果集绑定变量
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号