1
0
mirror of https://gitee.com/tawords/tawords-docs synced 2025-01-11 20:08:16 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
tawords-docs/docs/manual/6. 【清单 ToDo】/随笔记/php学习笔记(二十)mysqli的stmt的预处理类的使用(防止sql注入问题).md

88 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

https://blog.csdn.net/freejs/article/details/84368851
php学习笔记二十mysqli的stmt的预处理类的使用防止sql注入问题
```php
<?php
/**
* 处理数据库的扩展库
*
* mysqli的预处理语句
* mysqli_stmt预处理类推荐使用的类
* 优点mysqli和mysqli_result类的相比
* 1.性能mysqli_stmt高执行多条类型相同不同数据的sql不用多次编译sql
* 2.安全上sql注入问题用?占位符来解决)
* 使用(详情见代码)
* ?占位符绑定:(邦定时要注意,后写的信息要与定好的类型匹配否则无法执行)
* 例子:$stmt->bind_param("isd",$id,$name,$price);
* i整型
* ddouble
* sstring
* b二进制数
* 返回mysqli_stmt预处理类对象:$stmt = $mysqli->prepare($insert)
* 一次性将结果全取出来:store_result()
*
*/
//使用面向对象的方式:
$mysqli = new mysqli("localhost","root","root","hibernate");
if (mysqli_connect_errno()){
echo "连接失败:".mysqli_connect_error();
$mysqli = null;
exit();
}
$mysqli->autocommit(true);
$insert = "insert into users values (?,?,?);";
//1.返回mysqli_stmt预处理类对象
$stmt = $mysqli->stmt_init();
//准备一条语句放在服务器上
$stmt->prepare($insert);
//2.mysqli的方式(简化了操作)
//$stmt = $mysqli->prepare($insert);
$stmt->bind_param("isd",$id,$name,$price);
$id = 32;
$name = "ssssss";
$price = 21.23;
//绑定之后开始执行了
if ($stmt->execute()){
echo "执行成功";
}else {
echo "执行失败";
}
//2.处理结果集
//准备好语句
$select = "select * from users where id > ?";
//准备一条语句放在服务器上
$stmt->prepare($select);
$stmt->bind_param("i",$select_id);
//绑定结果集(要与查询的字段个数相同)
$stmt->bind_result($id,$name,$price);
$select_id = 12;
//绑定之后开始执行了
if ($stmt->execute()){
echo "执行成功";
}else {
echo "执行失败";
}
//获取结果集(每次获取)
while ($stmt->fetch()){
echo " <br>$id $name $price";
}
echo " <br>记录总数:".$stmt->num_rows;
//一次性将结果全取出来
$stmt->store_result();
//字段信息
$result = $stmt->result_metadata();
while ($field = $result->fetch_field()){
echo "<br>".$field->name;
}
$stmt->free_result();
$stmt->close();
$mysqli->close();
?>
```