面向過程的方式
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(); ?>