(獨孤九劍)---PHP操做MySQL數據庫

【一】開啓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 "關閉成功";
    }
相關文章
相關標籤/搜索