您的位置:首页 > 编程语言 > PHP开发

PHP-----mysqli编译预处理

2016-12-12 16:28 232 查看
先说下php和mysql执行的原理,

php发出sql命令给 mysql数据库,

mysql数据编译sql命令,

mysqi执行编译后的sql命令

mysql返回结果给php

应用场景:有的时候会需要批量执行多个操作,除了批量的sql意外,可能会需要因为需求来的时候是分批的。所以会分几次发请求。如果是按正常的流程来走,会分多次发起请求,然后应用上面的流程。为了提高效率,使用预处理技术,预处理有点类似正则表达式。如果请求是类似的,就把请求中变化的关键字 设成变量,然后发给mysql,mysql会保留这个编译的语句,每次新请求来,就用新请求中的变量去替换预设编译好语句中的变化位置。

代码如下:

用于处理执行dql语句

//预编译演示
//使用预处理的方式,从数据库查询
//使用预处理的方法查询所有 id>5的用户的enword chword, 5这个参数以后可以变

//1.创建mysqli对象
$mysqli= new MySQLi("localhost","root","root","worddb");

if (mysqli_connect_error()){
die(mysqli_connect_error());
}

//2.创建预编译对象,?是占位符
$sql="select enword,chword from words where id>?";

$mysqli_stmt=$mysqli->prepare($sql);

//绑定参数
$id=5;

//参数绑定就是给?赋值
/*
s ----string 字符串
i ----int 整形
d ----double
b ----blob
*/
$mysqli_stmt->bind_param("i",$id);

//绑定结果集,这个方法stmt_result,传入的的参数是地址符&传入,可以把运行后的结果带出来
$mysqli_stmt->bind_result($enword,$chword);

//执行
$mysqli_stmt->execute();

while($mysqli_stmt->fetch()){
echo "<br/>--$enword--$chword";
}

//执行另一个sql

echo "<br/>****************************************<";
$id=10;
$mysqli_stmt->bind_param("i",$id);
//绑定结果集,这个方法stmt_result,传入的的参数是地址符&传入,可以把运行后的结果带出来
//第2次无需在绑定结果集
//$mysqli_stmt->bind_result($enword,$chword);

//执行
$mysqli_stmt->execute();
while($mysqli_stmt->fetch()){
echo "<br/>--$enword--$chword";
}

//关闭资源
//关闭结果集,释放结果
$mysqli_stmt->free_result();

//关闭预编译的语句
$mysqli_stmt->close();

//关闭链接
$mysqli->close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: