PHP操作MySQL有多種方法
- mysql擴展(在后面版本會被移除,不推薦使用)
- mysqli擴展
-
PDO擴展
在這里根據(jù)慕課網(wǎng)的教程(教程鏈接),給大家整理了一下mysqli基本的使用方法顿仇。
主流PHP框架很多都是采用封裝PDO的數(shù)據(jù)庫操作類來操作數(shù)據(jù)庫结序,等大家以后學習框架后自然會體會到框架操作數(shù)據(jù)庫的快速方便優(yōu)雅,但是現(xiàn)在以基礎為重沉眶。
mysqli有面向?qū)ο蟮慕涌谂c面向過程的接口,因此有兩種使用方式揖盘,一種是對象的使用方式言蛇,一種是函數(shù)的使用方式,大家根據(jù)習慣選擇自己喜歡的吧笆包,個人比較喜歡面向?qū)ο笫降摹?/p>
因為涉及到類簡單講一下類的基本概念,表達能力一般环揽,用代碼解釋,你們感受下- -庵佣。
類是面向?qū)ο蟪绦蛟O計的基本概念歉胶,通俗的理解類就是對現(xiàn)實中某一個種類的東西的抽象, 比如汽車可以抽象為一個類巴粪,汽車擁有名字通今、輪胎粥谬、速度、重量等屬性衡创,可以有換擋帝嗡、前進、后退等操作方法璃氢。(以上文字抄自慕課網(wǎng)- -)
類的好處:數(shù)據(jù)與可以執(zhí)行的方法一起封裝,看起來更清晰狮辽,另外可以隱藏具體實現(xiàn)與數(shù)據(jù)一也,只對外公開接口。每一個類只需要考慮實現(xiàn)自己的接口喉脖,使用類時椰苟,只需要知道類提供了哪些接口。
下面只是一個最簡單的類树叽,還有更多的特性等待大家去學習舆蝴。
<?php
class people{
//類里的變量叫類的屬性,public是訪問修飾符,表示公開
public $name='lucy';
public $age=25;
//類里的function叫類的方法
public function getAction(){
echo '我是一個方法';
}
public function getAge(){
return $this->age;//$this關鍵字可以理解為對象本身
}
}
$person=new people();//實例化一個類,$person是people這個類的一個實例化對象
echo $person->name;//lucy.輸出對象的name屬性
$person->getAction();//我是一個方法.調(diào)用對象的一個方法.
echo $person->getAge();//25
請自行更改數(shù)據(jù)庫的連接選項
$con=new mysqli('127.0.0.1','root','root','test');
$con=mysqli_connect('127.0.0.1','root','root')
有幾個理解點:
- 上述代碼的$con你可以理解為PHP與MySQL的一個【連接】
- 下面的$query你可以理解為查詢的【結(jié)果集】
$query=mysqli_query($con,$sql_1);
//或者
$query=$con->query($sql)
- 下面這些方法或函數(shù)就是對你查到的結(jié)果集進行操作题诵,讓他們以【怎樣的形式】展現(xiàn)出來洁仗,關聯(lián)數(shù)組?索引數(shù)組性锭?對象赠潦?
mysqli_fetch_row($query)
//或者
$query->fetch_assoc()
數(shù)組
$a=array('id'=>1,'name'=>'zhang');//這是關聯(lián)數(shù)組
$a=array(1=>1,2=>'zhang');//這是索引數(shù)組
大家把代碼在本地跑一下草冈,結(jié)合慕課網(wǎng)或其他教程多用就熟練了
有啥不明白的來問各自組長或者問我吧她奥,講錯的或者代碼出錯的也請指出。
面向?qū)ο蟮氖褂梅椒?/p>
<?php
// http://www.imooc.com/video/6759 視頻教程在這里
header("Content-type:text/html;charset=utf-8");
/* 連接mysql怎棱,有錯就打印錯誤
或者:
$con=new mysqli('127.0.0.1','root','root')
if(!$con->select_db('test')){
echo $con->error;
}
設置編碼哩俭,防止亂碼
或者:
$con=new mysqli();
$con->connect('127.0.0.1','root','root')
*/
$con=new mysqli('127.0.0.1','root','root','test');
if($con->connect_error){
echo $con->error;
die("連接出錯,die方法結(jié)束進程");
// die('Connect Eroor'.$con->connect_error);
}
// 設置編碼拳恋,防止亂碼
if(!$con->set_charset('utf8')){
echo $con->error;
}
// 創(chuàng)建表test
$sql=<<<EOF
CREATE TABLE IF NOT EXISTS test_table(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
EOF;
if($con->query($sql)){
$query=$con->query("SELECT * FROM test_table");
if($query&&$query->num_rows==0){
$sql="INSERT test_table(username,password)VALUES('zhang','123'),('li','456')";
$con->query($sql);
}
}else{
echo $con->error ;
die("創(chuàng)建表出錯");
}
$sql_1="SELECT * FROM test_table";
echo '<h4>mysqli面向?qū)ο笫褂梅椒?lt;/h4>';
echo '<h4>這里只是舉了部分常用方法凡资,還有很多請自行看視頻或相關手冊</h4>';
echo'<h4>以下都是獲取查詢數(shù)據(jù)的第一條,如果要獲取全部的可以使用循環(huán)語句打印出來</h4>';
echo'<h4>在這里诅岩,$con是連接標識符讳苦,$query是執(zhí)行的結(jié)果集</h4>';
echo'<hr>';
$query=$con->query($sql_1);//執(zhí)行sql語句,將執(zhí)行結(jié)果賦給一個變量
if($query){
echo '$query->fetch_row():以索引數(shù)組的形式獲取數(shù)據(jù)(這個循環(huán)打印了)<br><br>';
//循環(huán)打印
while ($result=$query->fetch_row()) {
$data[]=$result;
echo 'name:'.$result[0].' '.'password:'.$result[1].'<br>';
}
print_r($data);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_assoc():以關聯(lián)數(shù)組的形式獲取數(shù)據(jù)<br><br>';
$result=$query->fetch_assoc();
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_BOTH):參數(shù)不寫就是默認以混合數(shù)組(索引數(shù)組吩谦、關聯(lián)數(shù)組)的形式獲取數(shù)據(jù)<br><br>';
$result=$query->fetch_array(MYSQLI_BOTH);//以混合數(shù)組形式,參數(shù)可寫可不寫
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_NUM):以索引數(shù)組的形式獲取數(shù)據(jù)鸳谜,等同于$query->fetch_row()<br><br>';
$result=$query->fetch_array(MYSQLI_NUM);
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->fetch_array(MYSQLI_ASSOC):以關聯(lián)數(shù)組的形式獲取數(shù)據(jù),等同于$query->fetch_assoc()<br><br>';
$result=$query->fetch_array(MYSQLI_ASSOC);
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo '$query->num_rows:獲取結(jié)果數(shù)目<br><br>';
$result=$query->num_rows;
print_r($result);
echo '<hr>';
}
$query=$con->query($sql_1);
if($query){
echo 'mysqli_num_rows:以對象形式獲取數(shù)據(jù)<br><br>';
$result=$query->fetch_object( );
print_r($result);
echo"<br>";
echo $result->id;
echo '<br>';
echo $result->username.'<br>';
echo $result->password.'<br>';
echo '<hr>';
}
echo"<h4>以下選擇性看</h4>";
echo 'mysqli_multi_query:執(zhí)行多條sql語句,注意每句結(jié)束的“;”<br><br>';
$sql="INSERT test_table(username,password)VALUES('wang','789'),('hao','101112');";
$sql.="UPDATE test_table SET password='11111111';";
// if($con->multi_query($sql)){
// echo 'multi success';
// };
//
$sql2="SELECT * FROM test_table where id=1;";
$sql2.="SELECT * FROM test_table where id=2";
if($con->multi_query($sql2)){
$rows=array();
echo "success<br>";
do{
if($result=$con->store_result()){
$rows[]=$result->fetch_all(MYSQLI_ASSOC);
}
}while($con->more_results()&&$con->next_result());
}else{
echo $con->error;
}
print_r($rows);
//關閉連接
$con->close();
echo"<h4>預處理和事務處理暫時不需要掌握式廷,請以后自己看視頻或者以后有機會講</h4>";
面向過程的使用方法
<?php
//面向過程
header("Content-type:text/html;charset=utf-8");
//以定義常量的形式定義數(shù)據(jù)庫連接信息咐扭,
define('HOST','127.0.0.1');
define('USERNAME', 'root');
define("PASSWORD", 'root');
// 連接mysql,有錯就打印錯誤
if(!($con=mysqli_connect('127.0.0.1','root','root'))){
echo mysqli_error($con);
die("連接MySQL出錯");
}
// 選擇數(shù)據(jù)庫也可以直接寫在connect方法的第四個參數(shù)里
if(!mysqli_select_db($con,'test')){
echo mysqli_error($con);
die("選擇database出錯");
}
// 設置編碼,防止亂碼
if(!mysqli_query($con,'set names utf8')){
echo mysqli_error($con);
die("設置編碼出錯");
}
// 創(chuàng)建表test
$sql=<<<EOF
CREATE TABLE IF NOT EXISTS test_table(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL
);
EOF;
if(mysqli_query($con,$sql)){
$query=mysqli_query($con,"SELECT * FROM test_table");
if($query&&mysqli_num_rows($query)==0){
$sql="INSERT test_table(username,password)VALUES('zhang','123'),('li','456')";
mysqli_query($con,$sql);
}
}else{
echo mysqli_error($con);
die("創(chuàng)建表出錯");
}
$sql_1="SELECT * FROM test_table";
echo '<h4>mysqli面向過程使用方法</h4>';
echo '<h4>這里只是舉了部分常用方法蝗肪,還有很多請自行看視頻或相關手冊</h4>';
echo'<h4>以下都是獲取查詢數(shù)據(jù)的第一條袜爪,如果要獲取全部的可以使用循環(huán)語句打印出來</h4>';
echo'<h4>在這里,$con是連接標識符薛闪,$query是執(zhí)行的結(jié)果集</h4>';
echo'<hr>';
// mysqli_query執(zhí)行sql語句辛馆,第一個參數(shù)是mysql連接,第二個參數(shù)是sql語句
$query=mysqli_query($con,$sql_1);//執(zhí)行sql語句豁延,將執(zhí)行結(jié)果賦給一個變量
if($query){
echo 'mysqli_fetch_row($query):以索引數(shù)組的形式獲取數(shù)據(jù)(這個循環(huán)打印了)<br><br>';
//循環(huán)打印
while ($result=mysqli_fetch_row($query)) {
echo 'name:'.$result[0].' '.'password:'.$result[1].'<br>';
$data[]=$result;
}
print_r($data);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_assoc($query):以關聯(lián)數(shù)組的形式獲取數(shù)據(jù)<br><br>';
$result=mysqli_fetch_assoc($query);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_BOTH):第二個參數(shù)不寫就是默認以混合數(shù)組(索引數(shù)組昙篙、關聯(lián)數(shù)組)的形式獲取數(shù)據(jù)<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_BOTH);//以混合數(shù)組形式第二個參數(shù)可寫可不寫
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_NUM):以索引數(shù)組的形式獲取數(shù)據(jù),等同于mysqli_fetch_row<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_NUM);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_array($query,MYSQLI_NUM):以關聯(lián)數(shù)組的形式獲取數(shù)據(jù)诱咏,等同于mysqli_fetch_assoc<br><br>';
$result=mysqli_fetch_array($query,MYSQLI_ASSOC);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_num_rows:獲取結(jié)果數(shù)目<br><br>';
$result=mysqli_num_rows($query);
print_r($result);
echo '<hr>';
}
$query=mysqli_query($con,$sql_1);
if($query){
echo 'mysqli_fetch_object:以對象形式獲取數(shù)據(jù)<br><br>';
$result=mysqli_fetch_object($query);
print_r($result);
echo"<br>";
echo $result->id;
echo '<br>';
echo $result->username.'<br>';
echo $result->password.'<br>';
echo '<hr>';
}
echo"<h4>以下選擇性看</h4>";
echo 'mysqli_multi_query:執(zhí)行多條sql語句,注意每句結(jié)束的“;”<br><br>';
$sql="INSERT test_table(username,password)VALUES('wang','789'),('hao','101112');";
$sql.="UPDATE test_table SET password='11111111';";
// if(mysqli_multi_query($con,$sql)){
// echo 'multi success';
// };
//
$sql2="SELECT * FROM test_table where id=1;";
$sql2.="SELECT * FROM test_table where id=2";
if(mysqli_multi_query($con,$sql2)){
$rows=array();
echo "success<br>";
do{
if($result=mysqli_store_result($con)){
$rows[]=mysqli_fetch_all($result,MYSQLI_ASSOC);
}
}while(mysqli_more_results($con)&&mysqli_next_result($con));
}else{
echo mysqli_error($con);
}
print_r($rows);
//關閉連接
mysqli_close($con);
echo"<h4>預處理和事務處理暫時不需要掌握苔可,請以后自己看視頻或者以后有機會講</h4>";