MySqli預處理
阿新 • • 發佈:2018-12-21
預處理是先提交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); ?>