Mysqli擴充套件庫增強—–預處理技術mysqlistmt
該方案防止sql注入
注意:這裡只需建立一次連線,以後都是發資料即可!
案例1:利用簡單預處理,往資料庫中執行dml語句插入(更新,刪除同種方法)資訊:preparestatment.php
<?php
//建立mysqli物件
$mysqli=new mysqli(“localhost”,”root”,”123456″,”test”);
//建立預編譯物件
$sql=”insert into user (name,password,email,age) values(?,?,?,?)”;
$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);
$mysqli->query(“set names utf8”);
//繫結引數
$name=”張三”;
$password=”zs”;
$email=”zs@163.com”;
$age=26;
//引數繫結->給?賦值,這裡型別和順序要一致!
$mysqli_stmt->bind_param(“sssi”,$name,$password,$email,$age);
$a=$mysqli_stmt->execute();
if(!$a){
die(“操作失敗”.$mysqli_stmt->execute());
}else {
echo ” 操作ok “;
}
//釋放
$mysqli->close();
用命令增加的新記錄!成功!
如果繼續新增,就不需要再執行$mysqli->prepare()了!
現在是隻發資料,連線也沒斷開,這樣效率會很高!
<?php
//建立mysqli物件
$mysqli=new mysqli(“localhost”,”root”,”123456″,”test”);
//建立預編譯物件
$sql=”insert into user (name,password,email,age) values(?,?,?,?)”;
$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);
$mysqli->query(“set names utf8”);
//繫結引數
$name=”張三”;
$password=”zs”;
$email=”zs@163.com”;
$age=26;
//引數繫結->給?賦值,這裡型別和順序要一致!
$mysqli_stmt->bind_param(“sssi”,$name,$password,$email,$age);
$a=$mysqli_stmt->execute();//每一個語句後面都要有一個執行語句!
//繼續新增
$name=”李四”;
$password=”ls”;
$email=”ls@sohu.com”;
$age=”58″;
$mysqli_stmt->bind_param(“sssi”,$name,$password,$email,$age);
$a=$mysqli_stmt->execute();
$name=”王五”;
$password=”ww”;
$email=”ww@sohu.com”;
$age=”109″;
$mysqli_stmt->bind_param(“sssi”,$name,$password,$email,$age);
$a=$mysqli_stmt->execute();
if(!$a){
die(“操作失敗”.$mysqli_stmt->execute());
}else {
echo ” 操作ok “;
}
//釋放
$mysqli->close();
執行時,一次新增3條記錄!
案例2:用預處理執行dql語句,查詢id>10的使用者,如何預防sql注入
<?php
//建立mysqli物件
$mysqli=new mysqli(“localhost”,”root”,”123456″,”test”);
if(mysqli_connect_error()){
die (mysqli_connect_error());
}
//建立預編譯物件
$sql=”select id,name,email from user where id>?”;
$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);
$mysqli->query(“set names utf8”);
//繫結引數
$id=10;
//引數繫結->給?賦值,這裡型別和順序要一致!
$mysqli_stmt->bind_param(“i”,$id);
//繫結結果集
$mysqli_stmt->bind_result($id,$name,$email);
//執行
$mysqli_stmt->execute();
//取出繫結的值
while($mysqli_stmt->fetch()){
echo “<br/>–$id–$name–$email—“;
}
//關閉資源
//釋放結果
$mysqli_stmt->free_result();
//關閉預編譯語句
$mysqli_stmt->close();
//關閉連結
$mysqli->close();
Id>10的都列出來了!
地址引用,所以結果能返回回來!
Sql注入的情況:
還有一種方式,用limit命令也可導致!
不小心輸入的命令,就可以獲取到更多的資訊,這對開發者來說,是非常危險的漏洞!
案例3:
<?php
function showtable($table_name){
$mysqli=new mysqli(“localhost”,”root”,”123456″,”test”);
if (mysqli_connect_error()){
die (mysqli_connect_error());
}
$sql=”select * from $table_name”;
$res=$mysqli->query($sql);
echo “共有 行”.$res->num_rows.”–列=”.$res->field_count;
$res->free();
$mysqli->close();
}
showtable(“user”);
本文轉自 gjp0731 51CTO部落格,原文連結:http://blog.51cto.com/guojiping/1323190
相關文章
- php mysqli擴充套件庫的使用PHPMySql套件
- PHP 擴充套件 Mysql 與 MysqliPHP套件MySql
- phpMyAdmin提示缺少mysqli擴充套件PHPMySql套件
- PHP中的MySQLi擴充套件學習(三)mysqli的基本操作PHPMySql套件
- 【PHP】PHP安裝擴充套件-mysqli.soPHP套件MySql
- 芯飛躍 看至強可擴充套件處理器的至強效應套件
- Lynx技術分析-JS引擎擴充套件技術基礎JS套件
- centos單獨安裝PHP的mysql和mysqli擴充套件CentOSPHPMySql套件
- 第3章 LALR等技術擴充套件套件
- 最佳VSCode的增強型Git擴充套件外掛VSCodeGit套件
- PostgreSQL10.0preview功能增強-OLAP增強向量聚集索引(列儲存擴充套件)SQLView索引套件
- Lynx技術分析-JS引擎擴充套件設計JS套件
- 圖片處理擴充套件 Grafika 的簡單使用套件
- 表空間無法擴充套件問題處理套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- 預處理技術文獻
- PHP中的MySQLi擴充套件學習(二)mysqli類的一些少見的屬性方法PHPMySql套件
- chrome擴充套件推薦:無法無天的圖片內文書處理擴充套件 --- Project NapthaChrome套件ProjectAPT
- Java管理擴充套件指南之JMX技術總覽Java套件
- 技術筆記(10)Unity編輯器擴充套件筆記Unity套件
- 圖片處理擴充套件 Intervention/image 的簡單使用套件
- 一個簡單的 PHP 時間處理擴充套件PHP套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- mysqli 事務處理MySql
- C 擴充套件庫 – mysql API套件MySqlAPI
- DLR 的擴充套件庫 Dynamitey套件MIT
- 使用擴充套件技術對SAP Fiori應用進行端到端的增強,一個實際案例介紹套件
- TotalFinder for Mac(Finder擴充套件增強工具) v1.15.1中文版Mac套件
- ES6-解構賦值,語義增強,擴充套件運算子賦值套件
- 文字預處理技術詳解
- Android 增強版百分比佈局庫 為了適配而擴充套件Android套件
- Swift---協議和擴充套件、 錯誤處理、泛型Swift協議套件泛型
- .NET 開源 EF Core 批處理擴充套件工具,真好用套件
- 03 Windows批處理的作用域和延遲擴充套件Windows套件
- 深度學習煉丹-資料預處理和增強深度學習
- .Net core Worker Service 擴充套件庫套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- 譯 - Spring 核心技術之 Spring 容器擴充套件點Spring套件