【二十】mysqli基于面向过程与面向对象的编程
面向过程的方式
musqli扩展库操作mysql数据库步骤:
1.获取连接并选择数据库
//语法 mysqli_connect(host,username,password,dbname,port,socket); $conn=mysqli_connect("127.0.0.1",'root','','user'); if (!$conn) { die("链接失败"); }
2.设置操作编码
// 语法:mysqli_set_charset(connection,charset); // 修改数据库连接字符集为 utf8 mysqli_set_charset($conn,"utf-8") ;
3.发送sql指令(分为ddl语句和dml语句、dql语句、dtl语句)
- ddl语句:数据定义语句
- dml语句:数据操作语句(update’、insert、delete)
- dql语句:(select)
- dtl语句:数据事务语句(rollback、commit)
查询数据(dml语句):返回的是一个结果集
//查询语句 $sql="select * from user1"; //执行sql语句 $res=mysqli_query($conn,$sql); //\打印返回结果为一个结果集 var_dump($res); 结果集:object(mysqli_result)#2 (5) { // ["current_field"]=> int(0) // ["field_count"]=> int(5) //["lengths"]=> NULL //["num_rows"]=>int(6) //["type"]=> int(0) //} echo "<br/>"; echo "----".$res->num_rows; //取结果集的数据 while ($obj = mysqli_fetch_object($res)) { var_dump($obj); foreach ($obj as $key => $value) { echo "$key------$value"; echo "<br/>"; } echo "<br/>"; }
函数名 | 说明 |
---|---|
mysqli_fetch_assoc($result) | 查询到的一条数据以关联数组形式返回 [key]=>value |
mysqli_fetch_row($result) 依次取出$res结果集的下一行数据 | 查询到的一条数据以索引数组形式返回 [0]=>value |
mysqli_fetch_array($result) | 查询到的一条数据以索引数组和关联数组的混合形式返回[key]=>valuec/[0]=>value |
mysqli_fetch_object($result) | 查询到的一条数据以对象属性的形式返回 object{[key]=>value} |
mysqli_fetch_array($result) | 查询到的一条数据以索引数组和关联数组的混合形式返回 |
mysqli_fetch_array($result,MYSQLI_BOTH) | 查询到的一条数据以索引数组和关联数组的混合形式返回 |
mysqli_fetch_array($result,MYSQLI_ASSOC) | 查询到的一条数据以关联数组的混合形式返回 |
mysqli_fetch_array($result,MYSQLI_ROW) | 查询到的一条数据以索引数组的混合形式返回 |
增删改(dml语句):返回的是一个布尔值
$sql="INSERT INTO user1(name,password,email,age)VALUES ('haha',MD5('123456'),'test@qq.com',16);"; $res=mysqli_query($conn,$sql) or die("执行失败"); var_dump($res); //返回的是一个布尔值 if (!$res) { echo "删除失败"; } echo "受影响的行数: " . mysqli_affected_rows($conn); if(mysqli_affected_rows($conn)>0){ echo "添加成功"; }else{ echo "没有影响的行数"; }
4.释放资源
注意:释放结果集和关闭连接内填的资源不一样
// 释放结果集 mysqli_free_result($res); // 函数关闭先前打开的数据库连接 mysqli_close($conn);
封装cuid工具
sqltool.class.php
<?php class sqltool{ private $conn; private $host="localhost"; private $user='root'; private $password=''; private $db='user'; // 构造方法,初始化连接数据库及设置字符编码 function __construct(){ $this->conn=mysqli_connect($this->host,$this->user,$this->password,$this->db); if (!$this->conn) { die("连接失败".mysqli_error()); } mysqli_set_charset($this->conn,"utf8"); } // 执行dml语句,并返回值 function excute_dml($sql){ $res=mysqli_query($this->conn,$sql) or die("shiai").mysqli_error(); if (!$res) { return 0; }else{ // mysqli_affected_rows:并影响的行数 if (mysqli_affected_rows($this->conn)>0) { return 1; }else{ return 2; } } } // 执行dql语句,并返回值 function excute_dql($sql){ $res=mysqli_query($this->conn,$sql) or die("shibai"); //var_dump($res); return $res; } }
testsql.php
<?php require "sqltool.class.php"; //$sql="insert into user1(name,password,email,age) values('hhhhhh',md5('123'),'qq@163.com',22)"; $sql="delete from user1 where name='qq'"; $sqltool=new sqltool(); // 调用dml $res=$sqltool->excute_dml($sql); if ($res==0) { echo "执行失败<br/>"; }else if ($res==1) { echo "执行成功<br/>"; }else if ($res==2) { echo "没有影响到行数<br/>"; } $sql1="select * from user1"; // 调用dql $res1=$sqltool->excute_dql($sql1); //var_dump($res1); if ($res1->num_rows>0) { while ($row=mysqli_fetch_row($res1)) { //var_dump($row); //echo "<br/>"; foreach ($row as $key => $value) { echo "---$value"; } echo "<br/>"; } } ?>
面向对象的编程
mysqlitest.php
<?php //面向对象 $conn=new mysqli("127.0.0.1","root","","test"); if ($conn->connect_errno) { echo $conn->connect_error; } $sql="select * from user1"; $res=$conn->query($sql); while ($row=$res->fetch_row()) { foreach ($row as $key => $value) { echo "<br/>".$value; } } $res->free(); $conn->close(); ?>
封装
sqliconnection.class.php
<?php class sqlconnect{ private $mysqli; private static $host="127.0.0.1"; private static $user="root"; private static $password=""; private static $database="test"; //构造函数 function __construct(){ $this->mysqli=new MySQLi(self::$host,self::$user,self::$password,self::$database); if (!$this->mysqli) { die("数据库链接失败".$this->mysqli->connect_error); } $this->mysqli->query("set names utf8"); } //查询 public function excete_dql($sql){ $res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error); return $res; } public function excete_dml($sql){ $res=$this->mysqli->query($sql) or die("数据库查询失败".$this->mysqli->error); if (!$res) { return 0; }else{ if ($this->mysqli->affected_rows>0) { return 1; }else{ return 2; } } } } ?>
sqlitest.php
<?php require "sqliconnection.class.php"; $sqlconnect=new sqlconnect(); //插入记录 $sql1="INSERT INTO user1(name,Password,Email,age)VALUES('asd','555','asd@qq.com','23');"; $res1=$sqlconnect->excete_dml($sql1); if ($res1=="0") { echo "失败<br/>"; }elseif ($res1=="1") { echo "成功<br/>"; }elseif ($res1=='2') { echo "没有影响到行数<br/>"; } // 查询记录 $sql="select * from user1"; $res=$sqlconnect->excete_dql($sql); while ($row=$res->fetch_row()) { foreach ($row as $key => $value) { echo "---$value"; } echo "<br/>"; } $res->free(); // $sqlconnect->close(); ?>