php mysqli擴充之預處理實例詳解

零下一度
發布: 2017-06-28 16:19:26
原創
1610 人瀏覽過

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

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

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

  本文案例為 資料庫名為test,資料表名為test,  欄位有id ,title 兩個,id自增長主鍵。

<?php 
define("HOST", "localhost");define("USER", &#39;root&#39;);define("PWD", &#39;&#39;);define("DB", &#39;test&#39;);$mysqli=new Mysqli(HOST,USER,PWD,DB);if ($mysqli->connect_errno) {    "Connect Error:".$mysqli->connect_error;
}$mysqli->set_charset(&#39;utf8&#39;);$id=&#39;&#39;;$title=&#39;title4&#39;;//用?代替 变量$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(&#39;is&#39;,$id,$title);//执行预处理语句if($mysqli_stmt->execute()){    echo $mysqli_stmt->insert_id;
}else{    echo $mysqli_stmt->error;
}$mysqli->close();
登入後複製


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

$id=&#39;4&#39;;$title=&#39;title4&#39;;$sql="SELECT * FROM test WHERE id=? AND title=?";$mysqli_stmt=$mysqli->prepare($sql);$mysqli_stmt->bind_param(&#39;is&#39;,$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(&#39;i&#39;,$id);if($mysqli_stmt->execute()){    $mysqli_stmt->store_result();   //将一个变量绑定到一个prepared语句上用于结果存储    $mysqli_stmt->bind_result($id,$title);    while ($mysqli_stmt->fetch()) {        echo $id.&#39; :&#39;.$title.&#39;<br/>&#39;;
    }


}
登入後複製


#

以上是php mysqli擴充之預處理實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!