1. 程式人生 > >MySqli預處理

MySqli預處理

預處理是先提交SQL語句到服務端,執行預編譯,

客戶端執行SQL語句時,只需要上傳輸入引數即可。

如果涉及多次讀取或儲存,效率高於普通SQL執行操作。

1.普通SQL執行

<?php
  header('content-type:text/html;charset=utf-8');
  $mysqli=new mysqli('localhost','root','','test');
  $mysqli->query('set names utf8');
  $sql="INSERT INTO users(name,money) values('張三',100)";
  $result=$mysqli->query($sql);
 ?>

 2.預處理(增刪改)

<?php
  header('content-type:text/html;charset=utf-8');
  $mysqli=new mysqli('localhost','root','','test');
  $mysqli->query('set names utf8');

  $sql="INSERT INTO users(name,money) values(?,?)"; //引數以?代替
  $stmt=$mysqli->prepare($sql); //預處理
  
  $name='張三';
  $money=100;
  $stmt->bind_param('si',$name,$money); //繫結引數
  $result=$stmt->execute();

  $name='李四';
  $money=200;
  $stmt->bind_param('si',$name,$money); //繫結引數
  $result=$stmt->execute();
 ?>

 3.預處理(查詢)

<?php
  header('content-type:text/html;charset=utf-8');
  $mysqli=new mysqli('localhost','root','','test');
  $mysqli->query('set names utf8');
  $sql='SELECT * FROM users WHERE id>?'; //引數以?代替
  $stmt=$mysqli->prepare($sql);  //預處理
  $id=1;
  $stmt->bind_param('i',$id); //繫結引數
  $stmt->bind_result($id,$name,$money);  //查詢需要繫結結果集 [必須繫結所有欄位]
  $stmt->execute(); //執行sql語句
  //取出結果集
  while($stmt->fetch()){
    $data[]=[
      'id'=>$id,
      'name'=>$name,
      'monry'=>$money
    ];
  }
  var_dump($data);

 ?>