php数据库编程---mysqli扩展库
1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作。Mysqli扩展库比mysql扩展库加强了。
2,mysqli扩展库和mysql扩展库的比较
(1) mysql是非持继连接函数而mysqli是永远连接函数。也就是说 mysql每次链接都会打开一个连接的进程,而 mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。
(2) mysqli连接是永久连接,而mysql是非永久连接。
mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。
mysqli连接:一直都只使用同一个进程。
好处:这样就可以很大程度的减轻服务器端压力。
当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数
(3) mysqli支持面向对象编程,同时mysqli扩展库考虑到php老程序员,提供面向过程的编程风格。
(4) mysqli支持一次执行多条sql。
(5) mysqli具有事务特性。
3,mysqli有两套编程风格
4,mysqli编程的快速入门,编写一个程序,这个程序从user1数据表中读取数据,并打印在网页中。
(1) 面向过程实现,mysqli面向过程与mysql基本相同,就是在mysql后加i,变为mysqli即可。不过还是有两处不同,分别是:
(1.1) 连接conn时候,mysql是在conn连接成功后,重新一步获取数据库的;mysqli是在conn连接同时获取数据库的。
mysqli进行连接
$conn = mysqli_connect($host,$username,$password,$dbName);
mysql进行连接
$conn = mysql_connect($host,$username,$password,$dbName); mysql_select_mysql($dbName);
(1.2) 执行sql语句时候,mysql参数依次是$sql和$conn,而mysqli的次序恰好相反。
mysqli
$rs = mysqli_query($conn,$sql);
mysql
$rs = mysql_query($sql, $conn);
(1.3)mysqli实例如下:
<?php //mysqli操作mysql数据库(面向过程风格) //1,得到mysqli连接 $conn = mysqli_connect("127.0.0.1","root","123456","test") or die('连接失败:'.$conn_connect_error()); mysqli_query("set names utf-8"); //2,向数据库发送sql语句(ddl,dml dql.....) $sql = "select * from user1"; mysqli_query($mysqli,$sql); //3,处理得到的结果 //循环取出$res中的数据mysqli_fetch_row mysql_fetch_row while($row=mysqli_fetch_assoc($res)){ foreach($row as $key=>$val){ echo "--$val"; } echo "<br/>"; } //4,关闭资源 //释放资源 mysqli_free_result($res); //关闭连接 mysqli_close(); ?>
(2) 面向对象实现,面向对象实现与面向过程实现类似,就是$conn和$rs都是类,调用的方法与面向过程相同。
<?php $host = '127.0.0.1'; $username = 'root'; $password = '123456'; $dbName = "test"; //mysqli操作mysql数据库(面向对象风格) //1,创建mysqli对象 $mysqli = new MySQLi($host,$username,$password,$dbName); //验证是否ok if($mysqli->connect_error){ die("连接失败! ".$mysqli->connect_error); } $mysqli->query("set names utf-8"); //2,操作数据库(发送sql) $sql = "select * from user1"; //$res是结果集.mysqli result $res = $mysqli->query($sql); //3,处理结果 while($row = $res->fetch_assoc()){ foreach($row as $key=>$val){ echo "--$val"; } echo "<br/>"; } //4,关闭资源 //释放资源 $res->free(); //关闭连接 $mysqli->close(); ?>
5,程序中的$res用于代表Sql语句的执行结果
① 如果执行的是dml语句,则返回bool;
② 如果执行的是dql语句,则返回查询结果MySQLi_Result结果集对象;
6,从mysqli result取出查询的结果有如下方式,推荐使用前两种方式,效率高。
① mysqli_result::fetch_assoc
② mysqli_result::fetch_row
③ mysqli_result::fetch_array
④ mysqli_result::fetch_object
7,数据库连接是非常稀有的资源,我们使用原则是晚创建、早释放。mysqli的面向对象特性对数据库进行增删改操作。操作过程中如果对应数据库的string类型,要求我们用''包括;如果对应数据库的数值型,则可以用''包括,也可以不用。
<?php header("Content-type:text/html;charset=utf-8"); //mysqli操作mysql数据库(面向对象风格) //1,创建mysqli对象 $mysqli = new MySQLi("127.0.0.1","root","123456","test"); //验证是否ok if($mysqli->connect_error){ die("连接失败! ".$mysqli->connect_error); } //2,操作数据库(发送sql) //$sql = "insert into user1 (name,password,email,age) VALUES ('小红',md5('123456'),'xiaohong@126.com',9)"; //$sql = "delete from user1 where id = 3"; $sql = "update user1 set name = '小花', password = md5('120987'),email='757499089@qq.com',age = 20 where id = 4"; //$res是结果集.mysqli result $res = $mysqli->query($sql); if(!$res){ echo "操作失败".$mysqli->error; }else{ if($mysqli->affected_rows > 0){ echo "执行成功!"; }else{ echo "没有数据表没有变化!"; } } //4,关闭资源 //关闭连接 $mysqli->close();