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

在前一篇?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-&gt;connect_error;  }$mysqli-&gt;set_charset('utf8');$id='';$title='title4';//用?代替?變量$sql="INSERT?test?VALUES?(?,?)";//獲得$mysqli_stmt對象,一定要記住傳$sql,預處理是對sql語句的預處理。$mysqli_stmt=$mysqli-&gt;prepare($sql);//第一個參數表明變量類型,有i(int),d(double),s(string),b(blob)$mysqli_stmt-&gt;bind_param('is',$id,$title);//執行預處理語句if($mysqli_stmt-&gt;execute()){????echo?$mysqli_stmt-&gt;insert_id;  }else{????echo?$mysqli_stmt-&gt;error;  }$mysqli-&gt;close();

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

立即學習PHP免費學習筆記(深入)”;

$id='4';$title='title4';$sql="SELECT?*?FROM?test?WHERE?id=??AND?title=?";$mysqli_stmt=$mysqli-&gt;prepare($sql);$mysqli_stmt-&gt;bind_param('is',$id,$title);if?($mysqli_stmt-&gt;execute())?{????$mysqli_stmt-&gt;store_result();????if($mysqli_stmt-&gt;num_rows()&gt;0){????????echo?"驗證成功";  ????}else{????????echo?"驗證失敗";  ????}  }????$mysqli_stmt-&gt;free_result();????$mysqli_stmt-&gt;close();

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

$sql="SELECT?id,title?FROM?test?WHERE?id&gt;=?";$mysqli_stmt=$mysqli-&gt;prepare($sql);$id=1;$mysqli_stmt-&gt;bind_param('i',$id);if($mysqli_stmt-&gt;execute()){????$mysqli_stmt-&gt;store_result();???//將一個變量綁定到一個prepared語句上用于結果存儲????$mysqli_stmt-&gt;bind_result($id,$title);????while?($mysqli_stmt-&gt;fetch())?{????????echo?$id.'?:'.$title.'<br>';  ????}      }

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享