1. 程式人生 > >詳解php與mysql的關係

詳解php與mysql的關係

通過本章你能夠學到什麼?
1、對資料庫有一個更為直觀的瞭解。
2、利用php對資料庫進行連線、建立、修改、插入等簡單操作。

這篇文章的特點
1、在學習過程中碰到的很多問題,我都記錄下來,在這篇文章中給予瞭解決辦法。對於初學者而言能夠很好 節約他們的事件,不用再像我耗費大量的時間查詢資料,解決問題。
2、有圖有真相,讓你能夠更容易理解。
3、絕不廢話。

第一部分:我的應用工具。

  編輯器:sublime text3.
  phpstudy:該程式包整合最新的Apache+PHP+MySQL+phpMyAdmin,一次性安裝,無須配置即可使用,是非常方便、好用的PHP除錯環境。你不需要再單獨下載安裝php、mysql、appche,簡單方便。
首先認識以下phpstudy:

phpstudy應用程式logo.png
4.png

點選上圖中的“MySQL管理器”,選擇MySQL-Front
5.png出現如下介面:
開啟之後就進入到正式的資料庫介面。
6.png
這裡只是讓大家見識以下mysql,後面會講它的具體操作。

這一部分,我所出現的主要問題就是開啟圖5中的localhost時出現連線不上mysql的問題,實在沒有辦法才選擇重灌phpstudy。

第二部分:理解php、apache 、mysql之間的關係。

有一位顧客在一家網店上 購買了一本書,網店店主收到需求後會去找廠家拿貨,店主拿到貨把貨發給顧客。
流程圖如下:

例項.jpg
我們從上圖得知,顧客和店主並不直接交流,而是通過店主來交換資料,店主盡提供溝通服務。php、apache、資料庫三者之間的關係就像顧客、店主和廠家之間的關係。php需要某種資料,直接把請求傳送給apache伺服器,apache再把這種請求反饋給資料庫,資料庫取出響應的資料交給apache伺服器,apache伺服器再發送給php。
為什麼php和資料庫不能直接溝通,非得通過apache呢?


打個比方:php和資料庫就好像兩個不同國籍的人,前者來自中國,後者來自美國,語言不通連溝通都成問題,更別說做生意了。恰好有這麼一個人叫apache,即懂中文又懂英語,把php的需求翻譯成英文後告訴資料庫,資料庫取出相應的貨物交給apache ,apache再交給php。
    php語言與資料庫資料不能相互識別,需要通過apache來進行轉換.
為什麼apache不能即當伺服器,又做資料庫,這樣少了一個環節不是更省事嗎?
這設計到一個分工合理性問題。
如果把apache和資料庫合併,就相當於apache既當店主又當廠家,會大大加深apache伺服器工作量。資料少的時候apache還能夠承受,資料大的時候,apache還要負擔工廠倉庫的運輸和管理工作,最終效益說不定還會大大降低,倒不如把倉庫運輸和管理的工作交給工廠來做。

第三部分:mysql資料庫(database)
世界上有很多中資料庫,mysql是其中最流行的一種。
MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。MySQL是一種關聯資料庫管理系統,關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。(mysql資料庫相當於將商品分類後放到不同的倉庫,每一個倉庫都是一個小資料庫,而工廠是一個大資料庫。這樣方便存取貨物,如果不進行分類存放,很明視訊記憶體儲效率會大大降低)。

RDBMS即關係資料庫管理系統(Relational Database Management System)的特點:
1.資料以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的資料域
4.許多的行和列組成一張表單
5.若干的表單組成database

第三部分:利用php操作mysql資料庫

1.使用php指令碼連線資料庫

PHP 提供了 mysql_connect() 函式來連線資料庫。該函式有5個引數,一般我們只用到前面3個。

這裡你也許會問,php可以連線資料庫那appache幹什麼去了。
這裡說明一下,apache是一個伺服器,其構築了一個php和資料庫可以溝通的環境.php和資料庫這兩個講不同語言的人打電話,通過apache這個同聲翻譯系統進行溝通

. server 規定要連線的伺服器。可以包括埠號,例如 “hostname:port”,或者到本地套接字的路徑,例如對於 localhost 的 “:/path/to/socket”。
如果 PHP 指令 mysql.default_host 未定義(預設情況),則預設值是 ‘localhost:3306’。
. user 使用者名稱。預設值是伺服器程序所有者的使用者名稱。
. password 密碼。預設值是空密碼。

php mysql_close 用來斷開與mysql資料庫的聯絡。一般情況下指令碼執行完後會自動斷開聯絡,所以這句也可以不寫。不過, mysql_close() 不會關閉由 mysql_pconnect() 建立的持久連線。
連線資料庫:

<?php
header("content-type:text/html;charset=utf-8");
$servername = "127.0.0.1";//伺服器主機地址
$username = "root";//訪問資料庫的使用者名稱
 $password = "root";//訪問資料庫的密碼
 //phpstudy的mysql有一個預設使用者名稱(root)和密碼(root)

// 建立連線
$conn = mysql_connect($servername, $username,$password);

// 檢測連線
if (!$conn) {
    die("Connection failed: " . mysql_connect_error());//die()輸出一條訊息,然後斷開
連線。
}
echo "連線成功";
mysql_close($conn);//關閉連線。
?>

資料庫不是每一個人都可以訪問,只有有許可權的人才可以進行訪問。下面我來演示如果mysql-front工具來新增使用者。

7.png
新增新使用者後:

8.png
用新使用者進行訪問操作:

<?php
header("content-type:text/html;charset=utf-8");
$servername = "127.0.0.1";//伺服器主機地址
$username = "sunwukong";//訪問資料庫的使用者名稱
 $password = "jingubang";//訪問資料庫的密碼
 //phpstudy的mysql有一個預設使用者名稱(root)和密碼(root)

// 建立連線
$conn = mysql_connect($servername, $username,$password);

// 檢測連線
if (!$conn) {
    die("Connection failed: " . mysql_connect_error());//die()輸出一條訊息,然後斷開連線。
}
echo "連線成功";
mysql_close($conn);//關閉連線。
?>

連線成功。

3、建立資料庫

php利用mysql_query(sql,connection)來建立或者刪除資料庫。mysql_query()把搜尋查詢的語句sql通過建立的連線connection傳送給資料庫。資料庫讀取之後響應相應操作。

<?php
header("content-type:text/html;charset=utf-8");
$servername = "127.0.0.1";//伺服器主機地址
$username = "sunwukong";//訪問資料庫的使用者名稱
 $password = "jingubang";//訪問資料庫的密碼
 //phpstudy的mysql有一個預設使用者名稱(root)和密碼(root)

// 建立連線
$conn = mysql_connect($servername, $username,$password);

// 檢測連線
if (!$conn) {
    die("Connection failed: " . mysql_connect_error());//die()輸出一條訊息,然後斷開連線。
}
echo "連線成功";
echo "</br>";
$sql = "CREATE DATABASE zhubajie";//CREATE DATABASE是sql語言中建立資料庫的語句,這裡是一個建立名為“zhubajie”的資料庫的字串。
$dingpa = mysql_query($sql,$conn);//將$sql查詢語句傳送給資料庫。
if (!$dingpa) {
    die("建立資料庫失敗:".mysql_error());
}
echo "建立成功";
mysql_close($conn);//關閉連線。
?>

執行後,
9.png

有時候你會發現,上面的php檔案執行會顯示下圖所示的錯誤:

10.png
出現這個錯誤的原因是你通過$username = “sunwukong”; 使用者名稱訪問資料庫時,而這個使用者在mysql中被建立時是沒有賦予許可權的。

11.png

4、刪除資料庫

刪除資料庫和創造資料庫一樣也是通過 mysql_query來實現。

12.png

5、建立資料表資料

13.png

我們將建立一個名為 “MyGuests” 的表,有 5 個列: “id”, “firstname”, “lastname”, “email” 和 “reg_date”:
建立資料表MyGuests:

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)

在資料表中的顯示如下:

14.png

這裡要注意物件瀏覽器顯示的表中的標題行,規定了資料的型別以及其它屬性。

14-1.png
上圖是具體的資料圖表。
下面我們來看具體的程式碼:

在 PHP 早起版本中我們使用 MySQL 擴充套件。但該擴充套件在 2012 年開始不建議使用。取而代之的是mysqli擴充套件和PDO,個人使用的是mysqli擴充套件。mysqli擴充套件是mysql擴充套件的延伸,使用起來兩者並沒有什麼差別,不過前者比後者更強大。下面使用的是mysqli面向過程(它還有一種面向物件的編碼方式)的編碼方式操作mysql,大家可以對比一下它同上面的mysql擴充套件編碼方式的區別。

18.png

19.png

AUTO INCREMENT - 設定 MySQL 欄位的值在新增記錄時每次自動增長 1
PRIMARY KEY - 設定資料表中每條記錄的唯一標識。 通常列的 PRIMARY KEY 設定為 ID 數值,與 AUTO_INCREMENT 一起使用。每個表都應該有一個主鍵(本列為 “zhubajie_t” 列),主鍵必須包含唯一的值。(這裡大家可能不太理解,不過到後面)

NOT NULL - 每一行都必須含有值(不能為空),null 值是不允許的。
DEFAULT value - 設定預設值
UNSIGNED - 使用無符號數值型別,0 及正數
上面三種屬性同指定列的資料型別一樣都可以新增給列。(這裡好好理解一下)。

6、刪除表資料

20.png