程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php mysqli擴展之預處理,phpmysqli預處理

php mysqli擴展之預處理,phpmysqli預處理

編輯:關於PHP編程

php mysqli擴展之預處理,phpmysqli預處理


  在前一篇 mysqli基礎知識中談到mysqli的安裝及基礎操作(主要是單條sql語句的查詢操作),今天介紹的是mysqli中很重要的一個部分:預處理。

  在mysqli操作中常常涉及到它的三個主要類:MySQLi類,MySQL_STMT類,MySQLi_RESULT類。預處理主要是利用MySQL_STMT類完成的。

  預處理是一種重要的 防止SQL注入的手段,對提高網站安全性有重要意義。

  本文案例為 數據庫名為test,數據表名為test,  字段有id ,title 兩個,id自增長主鍵。

 

  使用mysqli預處理執行插入操作:

<?php 

define("HOST", "localhost");
define("USER", 'root');
define("PWD", '');
define("DB", 'test');

$mysqli=new Mysqli(HOST,USER,PWD,DB);

if ($mysqli->connect_errno) {
    "Connect Error:".$mysqli->connect_error;
}

$mysqli->set_charset('utf8');

$id='';
$title='title4';
//用?代替 變量
$sql="INSERT test VALUES (?,?)";
//獲得$mysqli_stmt對象,一定要記住傳$sql,預處理是對sql語句的預處理。
$mysqli_stmt=$mysqli->prepare($sql);

//第一個參數表明變量類型,有i(int),d(double),s(string),b(blob)
$mysqli_stmt->bind_param('is',$id,$title);

//執行預處理語句
if($mysqli_stmt->execute()){
    echo $mysqli_stmt->insert_id;
}else{
    echo $mysqli_stmt->error;

}
$mysqli->close();

使用mysqli預處理防止sql注入:

$id='4';
$title='title4';

$sql="SELECT * FROM test WHERE id=? AND title=?";
$mysqli_stmt=$mysqli->prepare($sql);
$mysqli_stmt->bind_param('is',$id,$title);

if ($mysqli_stmt->execute()) {
    $mysqli_stmt->store_result();
    if($mysqli_stmt->num_rows()>0){
        echo "驗證成功";
    }else{
        echo "驗證失敗";
    }
}
    $mysqli_stmt->free_result();
    $mysqli_stmt->close();

使用mysqli預處理執行查詢語句:

$sql="SELECT id,title FROM test WHERE id>=?";

$mysqli_stmt=$mysqli->prepare($sql);
$id=1;

$mysqli_stmt->bind_param('i',$id);

if($mysqli_stmt->execute()){
    $mysqli_stmt->store_result();
//將一個變量綁定到一個prepared語句上用於結果存儲 $mysqli_stmt->bind_result($id,$title); while ($mysqli_stmt->fetch()) { echo $id.' :'.$title.'<br/>'; } }

    更多mysqli技術請參見php官方手冊,查手冊是學習的最好方法~

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved