欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

mysqli扩充库的预处理机制

更新时间: 2014-01-05 02:09:40 责任编辑: Author_N1

 

mysqli扩展库的预处理机制

数据库执行sql之前首先需要编译sql语句,之后通过DBMS执行编译后的语句。我们知道编译sql是需要时间的,如果同一时刻要执行多条sql语句,那么编译就需要很长时间,而这种时间的开销会造成程序性能的下降如并发,这个问题如果用mysql扩展库是没办法解决的但是mysqli可以,这或许就是mysqli扩展库比较优秀的地方。mysqli扩展库的这种处理类似jdbc的preparedstatement.下面就按我的方式来分享下这块知识。

1.编译sql语句,mysqli扩展库可以使用prepare()来预编译sql,该方法需要传入我们的sql,代码如下

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

2.绑定参数,当然了没有参数就不用绑定了,代码如下

 $id=3;
 //绑定参数
 $pstmt->bind_param("i",$id);

3.执行sql语句

$pstmt->execute();

4.绑定结果集并抓取数据,bind_result用来绑定结果集,该方法的第一个参数需要指定数据类型,s表示字符串,i表示int类型,之后就是要绑定参数名称,名称建议和数据库列名一致,fetch用来获取绑定的结果集

//绑定参数
     $pstmt->bind_param("i",$id);
     $pstmt->execute();
     $pstmt->bind_result($stuName,$stuId);
     while($pstmt->fetch()){
        echo "---$stuName--$stuId"."<br>";
     }

5.释放结果集(查询的时候才需要)并关闭预编译的sql以及数据库连接

$pstmt->free_result();
$pstmt->close();
$mysqli->close();

需要注意的是如果是插入、修改、删除操作 $pstmt->execute()返会的是布尔类型,成功是true失败是false

代码看起来有点散,下面我把全部代码贴出来

<?php
     $mysqli=new mysqli("localhost", "root", "123456","student");
     if($mysqli->connect_error){
       die("数据库连接失败:".$mysqli->connect_error);
     }
    
     $sql="select stuName,stuId from m_student where id=?";
     $pstmt=$mysqli->prepare($sql);

     $id=3;
     //绑定参数
     $pstmt->bind_param("i",$id);
     $pstmt->execute();
     $pstmt->bind_result($stuName,$stuId);
     while($pstmt->fetch()){
        echo "---$stuName--$stuId"."<br>";
     }
     $pstmt->free_result();
     $pstmt->close();
     $mysqli->close();
?>

很简单吧奋斗


上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:09:40
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6376/
本文WWW.DOC100.NET DOC100.NET版权所有。