PHP 操作 MySQL 數(shù)據(jù)庫
- 連接 MySQL 服務(wù)器,連接數(shù)據(jù)庫
- 進(jìn)行數(shù)據(jù)庫的操作(CURD)
- 斷開數(shù)據(jù)庫,斷開服務(wù)器
1. 連接數(shù)據(jù)庫
PHP5 以上版本建議使用:
- MySQLi extension
- PDO(PHP Data Objects)
MySQLi 只針對 MySQL 數(shù)據(jù)庫厕氨,PDO 應(yīng)用 12 種不同數(shù)據(jù)庫中。
MySQLi 使用面向?qū)ο螅?/strong>
<?php
new mysqli(hostname,username,password,dbname);
/***
hostname: 主機(jī)名,代表當(dāng)前連接的是哪一臺(tái)服務(wù)器
username: 連接MySQL服務(wù)器所需要的賬號(hào),默認(rèn):root
password: 連接MySQL服務(wù)器所需要的密碼,默認(rèn)為:""
dbname: 連接數(shù)據(jù)庫所需要的 數(shù)據(jù)庫名稱拂酣。
*/
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="shopdb";
// 創(chuàng)建連接 1.實(shí)例化MySQLi對象
$conn=new mysqli($servername,$username,$password,$dbname);
// 檢測連接
// 2.連接失敗 判斷標(biāo)志
// connect_errno --錯(cuò)誤代碼
// connect_error
// if($conn->connect_error){
// die('連接失敗:'.$conn->connect_error);
// }
if($conn->connect_errno){
// 如果是非0,代表連接失敗
// 顯示失敗信息
die($conn->error);
}
// echo '連接成功';
// 3.消除亂碼 --設(shè)置編碼格式 執(zhí)行SQL語句
$conn->query('set names utf8');
// 4. 執(zhí)行操作
$res=$conn->query('select * from `tab_goods`');
var_dump($res);
$conn->close();
?>
MySQLi 使用面向過程:
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="shopdb";
// 創(chuàng)建連接
$conn=mysqli_connect($servername,$username,$password,$dbname);
// 檢測連接
if(!$conn){
die('連接失敗:'.mysqli_conncet_eroor())
}
echo '連接成功';
?>
PDO 連接數(shù)據(jù)庫
new PDO("mysql:host=$hostname;dbname=$dbname",$username,$password)';
/**
* arg1: 'mysql:host=MySQL主機(jī)名;dbname=數(shù)據(jù)庫名稱'
* $username: 數(shù)據(jù)庫的用戶名
* $password: 數(shù)據(jù)庫的密碼
*/
$dbms='mysql'; //數(shù)據(jù)庫類型
$servername="localhost";
$username="root";
$password="";
$dbname="shopdb";
$dsn="$dbms:host=$servername;dbname=$dbname";
try{
$conn=new PDO($dsn,$username,$password);
echo '連接成功';
}catch(PDOException $e){
echo $e->getMessage();
}
2.執(zhí)行數(shù)據(jù)庫操作
2.1 MySQLi 類庫通過 query 函數(shù)執(zhí)行 SQL 語句做對應(yīng)的數(shù)據(jù)庫操作序宦。
$dbms='mysql'; //數(shù)據(jù)庫類型
$hostname="localhost";
$username="root";
$password="";
$dbname="demodb";
$dsn="$dbms:host=$hostname;dbname=$dbname";
// 創(chuàng)建連接
$mysqli=new mysqli($hostname,$username,$password,$dbname);
// 檢查連接
if($mysqli->connect_error){
die("連接失敗".$conn->connect_error);
}
// 準(zhǔn)備SQL語句 開始執(zhí)行數(shù)據(jù)庫操作
$sql="SELECT * FROM `tab_goods`";
// 通過query函數(shù)執(zhí)行SQL語句 得到結(jié)果集對象mysqli_result(不直接包含數(shù)據(jù))
$result=$mysqli->query($sql);
// mysqli_result類中的成員屬性
// $current_field:獲取當(dāng)前結(jié)果中指向的字段偏移位置,是一個(gè)整數(shù)背苦。
// $field_count:從查詢結(jié)果中獲取列的個(gè)數(shù)互捌。
// $lengths:返回一個(gè)數(shù)組,保存在結(jié)果集中獲取當(dāng)前行的每一個(gè)列的長度行剂。
// $num_rows:返回結(jié)果集中包含記錄的行數(shù)秕噪。
//
2.1 獲取數(shù)據(jù)
返回單條記錄
- 成員方法 fetch_array 以混合數(shù)組的形式返回單條記錄 (索引數(shù)組+關(guān)聯(lián)數(shù)組(key-value))
var_dump($result->fetch_array());
- 成員方法 fetch_object fetch_assoc 以對象的形式返回單條記錄
var_dump($result->fetch_object());
var_dump($result->fetch_assoc());
- 成員方法 fetch_row 以索引數(shù)組的形式返回單條記錄
var_dump($result->fetch_row());
返回所有記錄
$data=$result->fetch_all(MYSQLI_ASSOC);//推薦使用
$data=$result->fetch_all(MYSQLI_NUM);
$data=$result->fetch_all(MYSQLI_BOTH);
fetch_all 函數(shù)接受 三種不同的參數(shù) (系統(tǒng)常量)
- MYSQLI_ASSOC 返回關(guān)聯(lián)數(shù)組--(與 fetch_assoc 函數(shù)返回的類型相同。)
- MYSQLI_NUM 返回索引數(shù)組--(與 fetch_row 函數(shù)返回的類型相同厚宰。)
- MYSQLI_BOTH 返回混合數(shù)組--(與 fetch_array 函數(shù)返回的類型相同腌巾。)
2.1.2 新增/修改/刪除數(shù)據(jù)
通過 query 函數(shù)執(zhí)行后返回的結(jié)果集進(jìn)行判定。false --失敗
$dbms='mysql'; //數(shù)據(jù)庫類型
$hostname="localhost";
$username="root";
$password="";
$dbname="demodb";
$dsn="$dbms:host=$hostname;dbname=$dbname";
// 創(chuàng)建連接
$mysqli=new mysqli($hostname,$username,$password,$dbname);
// 檢查連接
if($mysqli->connect_error){
die("連接失敗".$conn->connect_error);
}
$sql="insert into `tab_goods` (`name`,`price`,`description`,`count`) values('huskyuncle',2.5,'賤賣賤賣2.5甩賣了',1);";
$sql1=sprintf("insert into `tab_goods` (`name`,`price`,`description`,`count`) values(%s,%s,%s,%s);",'aaa',23,'描述方式的發(fā)順豐',345);
$res=$mysqli->query($sql1);
if($res===TRUE){
ECHO '新紀(jì)錄插入成功';
}else {
echo 'error';
}
2.2 PDO 類庫數(shù)據(jù)庫操作铲觉。
通過 exec(),query()兩個(gè)函數(shù)執(zhí)行數(shù)據(jù)庫操作.
- exec() 執(zhí)行一條 SQL 語句澈蝙,返回后影響的行數(shù)。
- query() 執(zhí)行一條 SQL 語句撵幽,返回一個(gè) PDOStatement 對象
// EXEC 適用于增刪改
$dbms='mysql';
$hostname='localhost';
$dbname='demodb';
$username='root';
$password='';
$dsn="$dbms:host=$hostname;dbname=$dbname";
try{
$conn=new PDO($dsn,$username,$password);
$sql='delete from `tab_goods` where `id`=13';
$res=$conn->exec($sql);
var_dump($res);
}catch(PDOException $e){
echo $e->getMessage();
}
query() 函數(shù)返回 PDOStatement 對象灯荧,PDOStatement 對象提供了一系列的函數(shù),其中有fetchAll(),用來獲取結(jié)果集中的所有數(shù)據(jù)并齐,接受常用幾種參數(shù):PDO::FETCH_BOTH(混合數(shù)組),PDO::FETCH_ASSOC(對象),PDO::NUM(索引數(shù)組);
// QUERY 適用于查詢
$dbms='mysql';
$hostname='localhost';
$dbname='demodb';
$username='root';
$password='';
$dsn="$dbms:host=$hostname;dbname=$dbname";
try{
$conn=new PDO($dsn,$username,$password);
$sql='select * from `tab_goods`';
$res=$conn->query($sql);
$res->fetchAll(PDO::FETCH_ASSOC)
var_dump($res);
}catch(PDOException $e){
echo $e->getMessage();
}