【一】開啓mysql擴展php
在PHP操做MySQL數據庫以前,要保證開啓了MySQL數據庫擴展html
若未開啓,則能夠將php.int文件下的php_mysql開啓便可,方式爲去掉前面的封號;mysql
配置完成後要重啓服務器sql
【二】數據庫鏈接步驟數據庫
(1)鏈接服務器和數據庫數組
語法:mysqli_connect(主機,登陸名,密碼,數據庫名,數據庫服務器端口號);服務器
案例:登陸名和密碼爲root,鏈接user數據庫函數
$connect = mysqli_connect('localhost','root','root','user','3306'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功"; }
注意:若本步驟已填寫了數據庫,則跳過第3步oop
數據庫端口號可不填,默認3306post
(2)判斷錯誤
語法:mysqli_error(返回的資源);
類型:boolean(true,false)
返回鏈接錯誤,無錯誤則返回0,即true
(3)鏈接數據庫
語法:mysqli_select_db(服務器,數據庫);
案例:僅鏈接了服務器,未鏈接數據庫
$connect = mysqli_connect('localhost','root','root'); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功"; }
(4)設置字符集
語法:mysqli_set_charset(mysqli_connect返回的資源,字符集類型);
(5)準備SQL語句
一般須要把變量賦值在SQL語句裏使用
案例:user表裏增長數據
$sql = "insert into user(name,password) values('two',456)";
(6)發送SQL語句
語法:mysqli_query(mysqli_connect返回的資源,發送的SQL語句$sql);
SQL語句準備完成後,須要經過mysqli_query()傳送到服務器
MySQL服務器會執行發送過來的SQL語句
(7)關閉數據庫
語法:mysqil_close(mysqil_connect返回的資源);
mysqli_close($connect);
【三】其餘操做
修改SQL語句便可完成其餘操做
(1)建立數據庫
create database 數據庫名;
(2)建立數據庫表
create table 表名(字段名1 字段類型1...字段名n 字段類型n);
案例:建立一個表名爲user的表,第一個字段爲username,字段類型爲varchar,長度爲32;第二個字段爲password,字段類型爲varchar,長度爲32.
create table user(username varchar(32),password varchar(32));
(3)刪除數據庫表
drop table 表名;
(4)插入數據
insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
案例:將表單數據,經過post提交到數據庫
demo.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo測試</title> </head> <body> <form action="./index.php" method="post"> 姓名:<input type="text" name="username"><hr> 密碼:<input type="password" name="pwd"><hr> <input type="submit" value="提交按鈕"> </form> </body> </html>
index.php:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php $connect = mysqli_connect('localhost','root','root'); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } $name = $_POST['username']; $pwd = $_POST['pwd']; mysqli_query($connect,"INSERT INTO user (name, password) VALUES ('$name','$pwd')"); $close = mysqli_close($connect); if(!$close){ die("關閉數據庫失敗"); }else{ echo "關閉成功"; } ?>
(5)查詢數據
選擇,從表中選取數據展現select* from 表名 where;
案例:從數據庫選取數據展現到HTML表格
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php $connect = mysqli_connect('localhost','root','root'); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } $name = $_POST['username']; $pwd = $_POST['pwd']; //查詢結果 $result = mysqli_query($connect,"select* from user");
//判斷查詢結果
if($result && mysqli_num_rows($result)){//有結果集且結果集不爲空 echo "<table border=1 cellspacing=0>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['password']."</td>"; echo "<tr/>"; } echo "</table>";
}else{
echo "沒有數據";
} $close = mysqli_close($connect); if(!$close){ die("關閉數據庫失敗"); }else{ echo "關閉成功"; } ?>
拓展:遍歷數據讀取
mysqli_fetch_array(結果變量,[數組類型,可選]);
mysqli_num返回索引數組;mysqli_assoc返回關聯數組;mysqli_both返回索引數組和關聯數組;
$result 變量中存放由 mysql_query() 函數返回的數據。接下來,咱們使用 mysql_fetch_array() 函數以數組的形式從記錄集返回第一行。每一個隨後對 mysql_fetch_array() 函數的調用都會返回記錄集中的下一行。 while loop 語句會循環記錄集中的全部記錄。爲了輸出每行的值,咱們使用了 PHP 的 $row 變量 ($row['FirstName'] 和 $row['LastName'])。
(6)條件查詢
select語句後加入where條件篩選
案例:查詢name爲tony的數據
select* from user where name='tony'
條件:=,!=,>,<,<=,=>,between(範圍值),like(匹配模式)
(7)結果集排序
order by 字段名;
案例:根據名字進行排序
select* from user order by name
升序:asc;降序:desc;
(8)改動 / 更新update
更新,更新數據update 表名 set 表名 字段名=字段值 where 條件;
(9)刪除delete
刪除,刪除數據delete from 表名 where 條件;
注意:刪除和更新尾部需加where條件,不然會影響整個表單
(拓展)設置主鍵和自增字段
每一個表都應有一個主鍵字段。
主鍵用於對錶中的行進行惟一標識。每一個主鍵值在表中必須是惟一的。此外,主鍵字段不能爲空,這是因爲數據庫引擎須要一個值來對記錄進行定位。
主鍵字段永遠要被編入索引。這條規則沒有例外。你必須對主鍵字段進行索引,這樣數據庫引擎才能快速定位給予該鍵值的行。
下面的例子把 personID 字段設置爲主鍵字段。主鍵字段一般是 ID 號,且一般使用auto_increment設置。auto_increment會在新記錄被添加時逐一增長該字段的值。要確保主鍵字
段不爲空,咱們必須向該字段添加not null設置。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php $connect = mysqli_connect('localhost','root','root'); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } //SQL語句 $sql = "create table user( personID int not null auto_increment, primary key(personID), FirstName varchar(15), LastName varchar(15), Age int )"; mysqli_query($connect,$sql); $close = mysqli_close($connect); if(!$close){ die("關閉數據庫失敗"); }else{ echo "關閉成功"; } ?>
(拓展)
①MySQL數據類型
int爲整型;float浮點型;char和varchar字符串;date時間類型
②日期數據格式:
date(yyyy-mm-dd)
datetime(yyyy-mm-dd hh:mm:ss)
timestamp(yyyymmddhhmmss)
time(hh:mm:ss)
【四】註冊案例
注意點:
(1)去除兩端空格
場景:輸入密碼時,可能在左右多打空格,所以可使用trim()消除兩端空格
<?php $value = ' to ny '; echo strlen(trim($value));//由於使用了trim(),因此會去除兩端空格 ?>
(2)註冊時加上IP和時間
$username = trim($_POST['username']); $password = md5(trim($_POST['password']));//md5加密 $time = time();//註冊時間 $ip = $_SERVER['REMOTE_ADDR'];//註冊的IP
(3)密碼加密
$password = md5(trim($_POST['password']));//md5加密
(4)步驟:鏈接數據庫,判斷錯誤,設置字符集
$connect = mysqli_connect('localhost','root','root','user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } mysql_set_charset('$connect','utf-8');//注意:鏈接點爲字符串形式
【五】後臺列表顯示
能夠用上面select語句查詢顯示,作一個後臺用戶列表。經過後臺來修改用戶和密碼的相關信息
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <?php include 'config.php'; $connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } //查詢結果 $result = mysqli_query($connect,"select* from user"); $data = mysqli_fetch_assoc($result); //判斷查詢結果 if ($result&&mysqli_num_rows($result)) { echo "<table border=1 cellspacing=0>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['password']."</td>"; echo "<td><a href='delete.php?name='".$row['name'].">刪除用戶</a></td>"; echo "<td><a href='edit.php?name='".$row['name'].">編輯用戶</a></td>"; echo "<tr/>"; } echo "</table>"; }else{ echo "沒有數據"; } $close = mysqli_close($connect); if(!$close){ die("關閉數據庫失敗"); }else{ echo "關閉成功"; } ?>
【六】根據id增長編輯和刪除命令
(1)刪除的時候分爲單選刪除和多選刪除
(2)編輯的時候只能選擇一個用戶
下面依次介紹
(1)單選刪除
單選刪除能夠在delete.php後跟上?,而後加上id和值,點擊時便可進行刪除
echo "<td><a href='delete.php?id='".$row['id'].">刪除用戶</a></td>";
(2)編輯
編輯用戶也是如此,在edit.php後跟上?,而後加上id和值,點擊便可知道編輯哪一個用戶了
(3)多選刪除
多選刪除須要checkbox,傳入多個用戶id時須要在name後加id[],使用form表單將表格包起來,在表格外加上一個submit標籤即實現了多選刪除
(4)將用戶分頁
①分頁的幾個基本元素:首頁,尾頁,當前頁,上頁,下頁
②控制頁碼時,經過URL傳入頁碼值便可實現頁碼控制。在page.php後加上頁碼相關信息,便可算出有效信息
③原理:經過limit(偏移量offect,數量num)實現真正分頁,原理對比圖
頁碼 URL中get值 偏移量 數量
第1頁 1 0 5
第2頁 2 5 5
第3頁 3 10 5
第n頁 n (n-1)*5 5
④數字轉換
避免頁面存在小數,因此要作強制類型轉換:(int)$_GET['page']
寫法一:首次沒有傳page時,默認第1頁
$page = isset($_GET['page']) ? (int)$_GET['page']:1 ;
寫法二:原理與寫法一相似
if(isset($_GET_['page'])){ $page = (int) $_GET_['page']; }else{ $page = 1; }
④最後一頁
每一頁都是整數,包括最後一頁。如計算出20.3個頁面,則要向上取整函數ceil()
$one = 3; $two = 2; $result = $one / $two; echo ceil($result);//向上取整函數ceil()
⑤上下頁邊緣控制
最後一頁點擊下一頁,會致使分頁時無數據顯示。這時便要考慮清楚
如分頁在第1頁減1時,讓其爲第1頁;若在最後1頁加1時,讓其爲最後1頁
⑥計算總頁數
$count_sql = 'select count(name) as c from user';//select count() as c from user;從user表取總數,c爲別名 $result = mysqli_query($connect,$count_sql); $data = mysqli_fetch_assoc($result); $count = $data['c'];
【七】刪除用戶信息
(1)指定 / 單行刪除
單行是經過GET傳參方式向delete.php文件裏寫上對應ID
(2)批量刪除
多個刪除是經過POST方式向delete.php頁面傳遞對應的ID
if(is_array($_POST['id'])){ $id = join(',',$_POST['id']); }elseif(is_numeric($_GET['id'])){ $id = (int)$_GET['id']; }
知識點:
①is_array()判斷是否爲數組;
②join()函數是implode()函數的別名,返回由數組元素組合成的字符串
<?php $arr = array("hello", "world"); $str = join("|", $arr); echo $str; //輸出hello|word ?>
③is_numeric — 檢測變量是否爲數字或數字字符
原理:
join函數將多選刪除傳來的id變爲3,4,5,的格式,
最終多選刪除的SQL語句執行出來的效果就是delete from user where id in(3,4,5);
單選刪除語句效果就是delete from user where id in(3);
這樣便實現了單選和多選的自適應
$sql = "delete from user where id in($id)"
(3)都不符和的話,則視爲數據不合法
【八】修改用戶信息
index.php,edit.php,change.php
具體代碼在PHP修改用戶信息作了總結
【九】顯示亂碼的解決方案
下篇文章作總結
注意:
①單選刪除和編輯時,須要使用get方法傳入id,才能知道要操做的用戶;
②多選刪除時,須要傳入多個用戶。所以可使用form表單,使用post方法提交用戶id
③每一個須要數據庫的頁面都須要鏈接一次數據庫,能夠用include來操做
【總結】
(1)SQL對大小寫不敏感,因此增刪改查的增語法INSERT INTO 與 insert into 相同
(2)數據庫版本信息:mysqli_get_server_info(鏈接點);
(3)?至關於get傳參
(4)能夠寫一個配置文件config.php,將配置設爲常量。而後在須要的頁面用include調用
<?php //數據庫服務器 define('DB_HOST', 'localhost'); //數據庫用戶名 define('DB_USER', 'root'); //數據庫密碼 define('DB_PWD', 'root'); //數據庫名 define('DB_NAME', 'user'); //字符集 define('DB_CHARSET', 'utf8'); ?>
調用:
include 'config.php'; $connect = mysqli_connect(DB_HOST,DB_USER,DB_PWD,DB_NAME); mysqli_select_db($connect,'user'); if(!$connect){ die("could not connect:".mysqli_error()); }else{ echo "鏈接成功<br>"; } $close = mysqli_close($connect); if(!$close){ die("關閉數據庫失敗"); }else{ echo "關閉成功"; }