預先處理(防止sql注入的一種方式)

來源:互聯網
上載者:User

標籤:優點   成功   字元集   param   分析   pre   串連資料庫   順序   最佳化   


<!--- 預先處理(先行編譯) --->

<?php
/*
防止 sql 注入的兩種方式:
1. 人為提高代碼的邏輯性,使其變得更嚴謹,滴水不漏。 比如說 增加判斷條件,增加輸入過濾等,但是智者千慮必有一失。(不推薦)
2. sql 語句的預先處理
*/

// 預先處理: 就是在程式正式編譯之前,事先處理,因為有些功能實現是一樣的,只是發生了一些簡單的值替換

/*
********** 預先處理的原理: *********

insert into register_info values(?,?,?,?);

01. 建立 sql語句模板,並發送到資料庫。預留的值使用參數 ? 標記
02. 資料庫對模板解析,編譯,對sql 語句模板執行查詢最佳化,並儲存結果不輸出
03. 最多將綁定的參數傳給之前 ? 標記的地方,模板執行語句。如果傳的參數不一樣,模板就可以多次使用。但是對模板的解析只需要做一次


********** 預先處理的優點 ***********

01. 預先處理語句大大減少了分析時間,只做了一次增刪改查(至於值被多次賦予,已經不需要資料庫來操作)
02. 綁定參數減少了伺服器頻寬,你只需要發送查詢或者增加的參數,而不是整個 sql 語句
03. 預先處理語句能很好的防止 sql注入,因為參數的發送不會影響一開始對模板的解析,編譯,模版又是自己定義的,根本不會有漏洞

*/



// 物件導向

// 1. 串連資料庫伺服器,選擇資料庫 register
$mysqli = new mysqli(‘localhost‘,‘root‘,‘‘,‘register‘);

if ($mysqli){
echo ‘<h2><i>串連資料庫成功</i></h2>‘;

// 2. 設定字元集
$mysqli->set_charset(‘utf8‘);

// 3. 預先處理的核心代碼(這部分代碼資料庫只執行一次)
// a. 寫sql語句模板 (register_info是已有的表)
$sql = "insert into register_info(id,username,password,email,tel)VALUES (?,?,?,?,?)";

// b. prepare() 方法,預先處理階段
$stmt = $mysqli->prepare($sql);


/*------------- 以下代碼都是重複執行的,都是由 $stmt 對象操作 --------------*/
// a. 綁定參數 bind_param()
// 給預留的 ? 賦值,要求類型和順序要和 ? 所表示的一致
/*
格式預留位置,格式列表:
i ---> int 整型
s ---> string 字串
d ---> double 雙精確度浮點型
b ---> blob(binary large object) 二進位大對象
*/

$id = 2;
$username = ‘王二‘;
$password = ‘1237890‘;
$email = ‘[email protected]‘;
$tel = ‘12345678987‘;

$stmt->bind_param(‘issss‘,$id,$username,$password,$email,$tel);

// b. 開始插入
if ($stmt->execute()){
echo ‘<h2><i>插入成功</i></h2>‘;
}else{
echo ‘<h2><i>插入失敗</i></h2>‘;
}

// 4. 關閉預先處理
$stmt->close();

// 5. 關閉資料庫
$mysqli->close();



}else{
die(‘串連資料庫失敗!‘);
}










預先處理(防止sql注入的一種方式)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.