PHP-Mysqli擴充庫的先行編譯

來源:互聯網
上載者:User

標籤:

(1)先行編譯的好處  

假如要執行100條類似的sql語句,每一次執行,在MySQL端都會進行一次編譯,效率很低。提高效率的方法就是--減少編譯的次數。

先製造一個sql語句的模板,在MySQL端預先編譯好,之後每次只需要傳遞資料即可。

除了提高效率之外,先行編譯還可以防止sql注入。

(2)dml語句的先行編譯

以向一個表中插入資料為例。表結構如下:

+----------+----------------------------+
| Field      | Type                           | 
+----------+----------------------------+
| id           | int(11)                       | 
| name      | varchar(20)                |
| height     | float(5,2)                   |
| gender    | enum(‘male‘,‘female‘)  | 
| class_id   | int(11)                      | 
+----------+----------------------------+

 1 // dml語句的先行編譯 2 // 1.串連資料庫 3 $mysqli = new MySQLi(‘localhost‘,‘root‘,‘root‘,‘lianxi‘); 4 if(mysqli_connect_errno()){ 5     echo ‘串連失敗 ‘.$mysqli->connect_error; 6 } 7 $mysqli->query(‘set names utf8‘); 8 // 2.進行先行編譯 9 // 問號是預留位置10 $sql = ‘insert into student values (?,?,?,?,?)‘;11 // 通過MySQLi類的prepare()方法對sql模板進行編譯,返回一個MySQLi_STMT類對象12 $stmt = $mysqli->prepare($sql) or die($mysqli->connect_error);13 // 利用MySQLi_STMT類中的bind_param()方法綁定參數。第一個參數表示各個欄位的類型,i(int)、s(string)、d(double)14 $stmt->bind_param(‘isdii‘,$id,$name,$height,$gender,$classId);15 // 3.利用MySQLi_STMT類中的execute()方法插入資料16 $id = null;17 $name = ‘Mildred‘;18 $height = 165.00;19 $gender = 2;20 $classId = 12;21 $stmt->execute() or die($stmt->error);22 // 繼續插入資料23 $id = null;24 $name = ‘Shaw‘;25 $height = 174.50;26 $gender = 1;27 $classId = 11;28 $stmt->execute() or die($stmt->error);29 30 // 關閉串連31 $stmt->close();32 $mysqli->close();
(3)dql語句的先行編譯 

和dml語句不同的地方在於,除了要綁定參數,還需要綁定結果集

 1 // dql語句的先行編譯 2 // 1.串連資料庫 3 $mysqli = new MySQLi(‘localhost‘,‘root‘,‘root‘,‘lianxi‘); 4 if(mysqli_connect_error()){ 5     die(‘串連失敗 ‘.$mysqli->connect_error); 6 } 7 $mysqli->query(‘set names utf8‘); 8 // 2.編譯sql語句 9 $sql = ‘select * from student where id>?‘;10 $stmt = $mysqli->prepare($sql) or die($mysqli->error);11 // 3.綁定參數12 $stmt->bind_param(‘i‘,$id);13 // 4.綁定結果集14 $stmt->bind_result($id,$name,$height,$gender,$classId);15 // 5.執行16 $id = 2;17 $stmt->execute();18 // 6.利用MySQLi_STMT類中的fetch()方法,通過迴圈得到查詢的資料19 while($stmt->fetch()){20     echo $id.‘--‘.$name.‘--‘.$height.‘--‘.$gender.‘--‘.$classId;21     echo ‘<br>‘;22 }23 // 7.關閉串連24 $stmt->free_result();25 $stmt->close();26 $mysqli->close();

 

 

PHP-Mysqli擴充庫的先行編譯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.