《开源的PHPmysql:第15讲MySqli扩展.ppt》由会员分享,可在线阅读,更多相关《开源的PHPmysql:第15讲MySqli扩展.ppt(23页珍藏版)》请在三一办公上搜索。
1、第十二讲 MYSQLi扩展,本节内容,开启与关闭数据库链接开启数据库查询数据表取得结果集数据准备语句,Mysqli简介,php的mysqli扩展被封装到一个类中,它是一种面向对象的技术,只能在php5和mysql4.1(或更高版本中使用),其执行速度更快,比传统的过程化方法更高效也更方便,即使对面向对象不了解,mysqli扩展也提供了面向过程的编程方式来供用户选择。,Mysqli优势,兼容性与维护性:mysqli扩展可以很容易地使用MySQL的新功能,所以mysqli拥有与MySQL更高的兼容性。即使MySQL的新版本又出现了更多功能,mysqli扩展也可以很容易的支持。面向对象:mysqli
2、扩展已封装到一个类中,从而可使用面向对象的方式编程。速度和安全性:mysqli扩展执行的速度要比之前版本的mysql扩展快了很多。mysqli扩展支持MySQL新版本的密码杂凑和验证程序,更加提高了应用程序的安全性。预准备语句:预准备语句可提高重复使用的语句的性能,mysqli扩展提供了对预准备语句的支持。调试功能:mysqli扩展进一步改进了调试功能,提高了开发效率。,Mysqli使用前提,要在PHP中使用mysqli扩展,需要在配置文php.ini中添加如下的设置:extension=php_mysqli.dll如果配置文件中已有上述设置,确保extension前面没有“;”,否则将其去掉
3、。同时确保你的extension_dir指向同目录下的ext目录;,第一步-连接数据库,mysqli扩展第一步也是连接数据库。面向对象风格:host_info;$mysqli-close();?,第一步-连接数据库,过程化风格:,第二步-更换数据库,面向对象风格:select_db(world);if(mysqli_connect_errno()echo Connect failed:,mysqli_connect_error();exit();$mysqli-close();?,第二步-更换数据库,过程化风格:,第三步-执行sql操作,面向对象风格:query(SELECT Name FRO
4、M City)printf(Select returned%d rows.n,$result-num_rows);$result-close();$mysqli-close();?,第三步-执行sql操作,过程化风格:,第四步-读取数据,面向对象风格(使用mysqli_result类):query(SELECT Name FROM City)printf(Select returned%d rows.n,$result-num_rows);$result-close();$mysqli-close();?,mysqli_result类-属性,field_count-返回结果集中的列数num_r
5、ows-返回结果集中的行数,mysqli_result类-方法,close-关闭结果集data_seek-移动数据指针fetch_field-获取结果集中列的信息fetch_fields-获取结果集中所有列fetch_array-从结果集中取一行数据(返回值为索引数组或关联数组或既有索引又有关联的数组)fetch_assoc-从结果集中取一行数据(返回值为关联数组)fetch_object-从结果集中取一行数据(返回值为对象)fetch_row-从结果集中取一行数据(返回值为索引数组),第四步-读取数据,面向对象风格(使用mysqli_result类):query($query);$row=$
6、result-fetch_array(MYSQLI_BOTH);printf(%s(%s)n,$row0,$rowCountryCode);$result-close();/或者使用$result-free();$mysqli-close();?,第四步-读取数据,过程化风格:,注意:接下来我们不再介绍过程化的方法,而且既然我们使用mysqli扩展,我们就尽量使用面向对象的 方法,准备语句,因为通常情况下我们会重复执行一个查询,每次迭代使用不同的参数(比如循环删除数据),但是使用传统的mysql_query方法和循环机制来实现不近编写代码不方便,而且效率很差,开销很大。为解决此问题,php引入
7、了准备语句。有两种准备语句:1.绑定参数2.绑定结果下面我们通过例子来介绍他们的用法。,准备语句-绑定参数,stmt_init();/创建准备语句的对象/创建准备语句if($stmt-prepare(SELECT District FROM City WHERE Name=?)/绑定参数(s代表$city是字符串类型)$stmt-bind_param(s,$city);$stmt-execute();/执行查询$stmt-close();/关闭准备语句$mysqli-close();?,示例说明,上页例子中可以看出准备语句绑定参数的步骤大概是:第一步:创建对象($stmt=$mysqli-st
8、mt_init();)第二步:准备语句($stmt-prepare(“sql语句”),其中需要传入的参数用?代替。第三步:绑定参数($stmt-bind_param(s,$city)。第四步:执行($stmt-execute();)第五步:关闭($stmt-close();)注意:在绑定参数时方法bind_param可以有任意个参数,其中第一个参数指定了所传递参数的类型。例如:bind_param(“isdb,$id,$name,$score,$image)代表$id为int型,$name为字符串型,$score为double型,$image为二进制型。,准备语句-绑定结果,stmt_init
9、();/创建准备语句if($stmt-prepare(SELECT code,name FROM City)$stmt-execute();/执行查询$stmt-bind_result($col1,$col2);/绑定结果 while($stmt-fetch()/获取准备语句的结果 printf(%s%sn,$col1,$col2);$stmt-close();/关闭准备语句$mysqli-close();?,示例说明,上页例子中可以看出准备语句绑定结果的步骤大概是:第一步:创建对象($stmt=$mysqli-stmt_init();)第二步:准备语句($stmt-prepare(“sql语
10、句”)第三步:执行($stmt-execute();)第四步:绑定结果第五步:获取结果($stmt-fetch()第六步:关闭($stmt-close();)注意:在绑定结果时方法bind_result可以有任意个参数但是要与你所查询的列数相匹配,绑定参数和结果示例,stmt_init();$city=Amersfoort;if($stmt-prepare(SELECT District FROM City WHERE Name=?)$stmt-bind_param(s,$city);$stmt-execute();$stmt-bind_result($district);$stmt-fetch();printf(%s is in district%sn,$city,$district);$stmt-close();$mysqli-close();?,