我們先來看傳統的操作資料庫的方法。
傳統的操作資料庫方法有兩種:
#先寫一條sql語句,然後透過mysqli->query($sql) 去操作資料庫(筆者這裡使用的是mysqli擴充庫)。這樣操作 並不會有什麼大的錯誤,但是當你要插入上千條上萬條資料呢?難道也還是要這樣寫一 條sql語句然後再操作一下資料庫?那有人會說, 好辦嘛 ,用mysqli自帶的操作多條sql語句的方法,即第二種方法。
mysqli->multi_query($sql),這是操作多條sql語句的方法,如下:
#
如果你認為這樣就可以完全解決問題,那麼你就錯了,接下來讓我們來看看MySQL資料庫執行sql語句的原理吧!
從上圖可以看出,無論我們是發送一條sql語句還是發送多條sql語句,資料庫都要對其一一的進行編譯,那麼當資料達到一定量之後,資料庫的開銷必然很大。那究竟要怎麼解決這個問題呢?此時就引入了預處理技術的概念。
下面我們來看一段預處理技術的程式碼:
<? = mysqli("localhost", "root", "123456", "student" (-> ("连接失败" . -> ->query("set names utf8" = "insert into student_info(name,age,sex,studentNo,grade) values (?,?,?,?,?)" = ->prepare( = "张三" = 30 = 0; = "1501222" = 89 ->bind_param("siisd", , , , , -> ->close();
首先我們來看
等等,为什么values会是问号呢?这里的问号相当于一个占位符,之后只要向数据库发送数据就能够自动把数据对应的填充进去 这就是预编译技术的精髓之处,我们通过bind_param,顾名思义,就是绑定参数的意思,那么,它给谁绑定参数呢?看看上面的values (?,?,?,?,?),bind_param里面的参数一一对应 着values的每一个参数。那么bind_param里面的siisd又是什么意思呢?别急,请看下方: 参数有以下四种类型: i - integer(整型) d - double(双精度浮点型) s - string(字符串) b - BLOB(布尔值) 每个参数都需要指定类型。 通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险.
#$my_stmt-##<span style="color: #000000"> 代码如下:<br/> </span>
使用預處理資料查詢資料庫
<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017/7/21 * Time: 9:37 */$mysqli = new mysqli("localhost","root","123456","student"); if($mysqli->connect_error){ die("连接失败".$mysqli->error); } $mysqli->query("set names utf8"); $sql="select name,sex,age from student_info where id>?"; $mysqli_stmt=$mysqli->prepare($sql); $id=1;$mysqli_stmt->bind_param("i",$id); $mysqli_stmt->execute();//绑定结果集,传递的是引用$mysqli_stmt->bind_result($name,$sex,$age); while($mysqli_stmt->fetch()){ echo "$name--$sex--$age"."<br>"; }//关闭资源$mysqli_stmt->free_result();//关闭预编译语句,否则数据库会一直保存$mysqli_stmt->close();//关闭连接$mysqli->close();
#rrreee 可以看出,查詢與插入相比多了
這樣一句程式碼,那麼這句程式碼是什麼意思呢? 可以想像,查詢資料庫的時候,資料庫必然會回傳一個結果集,那麼如果你想取得該結果的一些數據,那麼就必須加上這句話。那麼,這些參數又是什麼意思呢? 看看這句sql語句,你會發現bind_result裡面的參數一一對應於sql語句當中你要查詢的欄位(name,sex,age),當然,bind_result裡面的參數可以不與sql語句的欄位名字相同,但是我們通常會建議這樣做。 多的不說,上圖: 可以這樣理解:$name,$sex,$age是引用傳遞,他們相當於指針,分別指向結果集的第一行的列位址,每執行一次while語句,指標便向下移動 #這樣,便可以列印出每一行的資料了,結果如下: 同時,那三個關閉別忘了,重中之重。 ###以上是關於mysql預處理技術的小技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!