PHP之MYSQL數據庫,mysql數據庫
MYSQL數據庫簡介
1.什麼是數據庫?
數據庫(database) 就是一個由一批數據構成的有序集合,這個集合通常被保存為一個或多個彼此相關的文件。
2.什麼是關系型數據庫?
數據被分門別類的存放在一些結構化的數據表(table)中,而數據表之間又往往會形成種種內在的交叉關系。存在於數據表之間的這種關系(relation)使數據庫又被稱為關系型數據庫;
3.關系型數據庫系統
MySQL、Oracle、Microsoft SQL Server 和IBM DB2都是關系型數據庫系統(database system)。除了管理數據,一個這樣的系統還包括用來管理各種關系數據庫的程序。一個合格的關系數據庫系統不僅要確保各種數據的存儲情況安全可靠,還必須能夠處理對現有數據進行查詢、分析和排序以及對新數據進行保存等諸多命令。
4.非關系型數據庫:mongoDB
5.數據表、記錄、字段、查詢、SQL、索引
數據表(table)即用來實際存放有關數據的框架結構。
這種數據表裡的每一行被稱為一條數據記錄(data record),簡稱”記錄”,每條記錄的結構和格式是由人們在定義該數據表時決定的。例如,在某個用戶表裡,每條記錄可能包含著用戶的姓名,出生日期,注冊時間等多個字段(field)。每個字段對自己所能存儲的信息類型又有著一定的要求(例如,它必須是一個有著某種特定格式的數字或者是一個字符個數不得超過某個預定義最大值的字符串)。
查詢 是人們用各種SQL指令構造出來的,SQL指令負責具體完成篩選和提取結果數據的工作
SQL (Structured Query Lanuage) 結構化查詢語言;這種語言已發展為人們在構造數據庫查詢命令的一個標准。
SQL語言
SQL (structured Query Language) 結構化查詢語言;
主要用途是構造各種數據庫系統操作指令,如 SELECT、INSERT、UPDATE、DELETE;
SQL命令可以分類以下三大類別:
DML(Data Manipulation Language 數據處理語言):這類命令主要包括 SELECT、INSERT、UPDATE、DELETE等用來從數據表讀出數據,把數據存入數據表或是對數據表裡的現有記錄進行修改的命令;(增刪改查)
DDL(Data Definition Language 數據定義語言):這類命令主要包括CREATE TABLE、
ALTER TABLE 等用來定義和改變數據庫結構的命令;
DCL(Data Control Language 數據控制語言):這類命令主要包括GRANT、REVOKE以及另外幾個用來幫助人們設置和調整MySQL訪問控制機制的SQL命令;
查詢(SELECT)
1.簡單查詢
SELECT * FROM tablename 查詢所有
2.限制查詢結果中的數據列個數 查詢固定的兩列
SELECT column1,column2 FROM tablename
3.確定數據表裡有多少條數據記錄 查詢記錄
SELECT COUNT(id) FROM tablename
WHERE子句
WHERE子句設置查詢條件,過濾掉不需要的數據行。 WHERE代表限制條件
例如查詢年齡大於20的記錄: SELECT * FROM usertable WHERE age>20
WHERE子句可包括各種條件運算符:
1.比較運算符
運算符
含義
=
等於
>
大於
>=
大於等於
<
小於
<=
小於等於
<>
不等於
2.邏輯運算符
運算符
含義
AND
如果組合的條件都是TRUE,返回TRUE
OR
如果組合的條件其一是TRUE,返回TRUE
NOT
如果條件是FALSE,返回TRUE
3.限制查詢
LIMIT子句用於強制SELECT語句返回指定的記錄數。
LIMIT接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。注意:初始記錄行的偏移量是0而不是1。
例:檢索前5個記錄行
SELECT * FROM table LIMIT 5;
檢索記錄行 6-15
SELECT * FROM table LIMIT 5,10;
4.查詢結構排序
使用ORDER BY子句對查詢返回的結果排序。
ORDER BY子句的語法格式為: ORDER BY {column_name [ASC|DESC]} [,...n]
其中ASC表示升序,為默認值,DESC為降序
增刪改
1.插入數據記錄(INSERT)
例:INSERT INTO user (username,password) VALUES ('admin','123456')
一次插入多條記錄
INSERT INTO user (username, password)
VALUES ('user1', '123456'), ('user2','123456'), 注:用逗號隔開
2.修改數據記錄(UPDATE)
例:UPDATE user SET username = 'admin1', passwd ='12345678' WHERE uid = 10
3.刪除數據記錄(DELETE)
例:DELETE FROM user WHERE uid = 10
數據庫操作
編程接口
PHP5開始,PHP向程序員提供了兩種MySQL應用程序編程接口:一種是從PHP早期版本一直就有的mysql功能模塊;另一種是從PHP5才開始有的mysqli接口;
mysql功能模塊不是PHP的一個集成組件。要想使用這個功能擴展模塊,PHP的Linux版本必須在編譯時加上一個—with-mysql選項。PHP的windows版本通過一個DLL文件提供了相應的擴展,不管使用是哪一種操作系統,都必須在php.ini文件裡啟用這個擴展以確保PHP能夠找到所有必要的DLL。
操作數據庫的步驟
鏈接mySQL數據庫
通過mysql功能模塊連接MySQL服務器的辦法是調用mysql_connect()函數 ,它需要提供3項信息:MySQL服務器的主機名、MySQL用戶名和密碼。如果MySQL服務器與PHP運行在同一台計算機上,可以使用localhost作為它的主機名。
例:$conn = mysql_connect("localhost", "root", "123456"); $conn為句柄
mysql_connect(server,user,pwd,newlink,clientflag)
參數
描述
server
可選。規定要連接的服務器。
可以包括端口號,例如 "hostname:port",或者到本地套接字的路徑,例如對於 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定義(默認情況),則默認值是 'localhost:3306'。
user
可選。用戶名。默認值是服務器進程所有者的用戶名。
pwd
可選。密碼。默認值是空密碼。
newlink
可選。如果用同樣的參數第二次調用 mysql_connect(),將不會建立新連接,而將返回已經打開的連接標識。參數 new_link 改變此行為並使 mysql_connect() 總是打開新的連接,甚至當 mysql_connect() 曾在前面被用同樣的參數調用過。
clientflag
可選。client_flags 參數可以是以下常量的組合:
MYSQL_CLIENT_SSL - 使用 SSL 加密
MYSQL_CLIENT_COMPRESS - 使用壓縮協議
MYSQL_CLIENT_IGNORE_SPACE - 允許函數名後的間隔
MYSQL_CLIENT_INTERACTIVE - 允許關閉連接之前的交互超時非活動時間
如果連接成功,這個函數將返回一個標識號碼。反則將返回FALSE,並向Web服務器發送一條出錯消息,這將使PHP腳本所生成的結果HTML文檔裡也出現一條出錯消息。如果不想讓最終用戶在他們的web浏覽器裡看到這樣的出錯消息,就必須在調用mysql_connect()函數的時候在它的前面加上一個@字符。
關閉mySQL數據庫
查詢MySQL服務器結束後,應當關閉連接。不過關閉連接不是必需的,因為PHP的垃圾回收機制會處理這個問題。
mysql_close()函數關閉可選參數link_id對應的連接。如果沒有指定link_id,則認為是最近打開的連接。
例:mysql_close();
選擇數據庫
與MySQL服務器建立連接後,就可以使用各種mysql_xxx()函數去執行SQL命令。但為了避免每次調用mysql_xxx()函數都要指定目標數據庫,最好先用mysql_select_db()函數(它相當於SQL命令USE databasename )為後續操作選定一個默認數據庫。
例:mysql_select_db("mycompany"); db(datebase)
執行SQL語句
為了執行SQL命令,需要把它們作為一個字符串傳遞給mysql_query()函數.如果想訪問的不是當前數據庫,就需要調用mysql_db_query()函數來添加SQL命令並明確給出那個數據庫名稱,這兩個函數的最後一個參數(連接的ID號碼,即mysql_connect()的返回值)都是可選的,只有與MySQL服務器建立了多個連接的時候才需要給出這個參數
例:$result = @mysql_query("SELECT * FROM user");
// 自 PHP 4.0.6 起不提倡使用此函數。不要用此函數
$result = @mysql_db_query("mycompany", "SELECT * FROM product");
如果SQL命令執行成功,mysql_query()函數將返回PHP資源的引用指針( 一個Resource id #2格式的字符串); 否則將返回FALSE,並生成一條出錯消息;
mysql_query()函數可以用來執行任何一種SQL命令,比如 SELECT(查詢)、INSERT(插入新記錄)、UPDATE(修改現有記錄)、DELETE(刪除現有記錄)、CREATE TABLE(創建新數據表)、ALTER TABLE(修改數據表結構)等。
獲取顯示數據
1. mysql_fetch_row() 獲取行
mysql_fetch_row()函數將以一個普通數組的形式返回一條結果,它的各個字段需要以$row[n]的方式進行訪問。
2. mysql_fetch_array()
mysql_fetch_array()函數將以一個關聯數組的形式返回一條結果,它的各個字段需要以$row[n]或$row["colname"]的方式進行訪問。
3. mysql_fetch_assoc()
mysql_fetch_assoc()函數也將以一個關聯數組的形式返回一條結果記錄,但它的各個字段只能以 $row["colname"]的方式進行訪問。
4. mysql_fetch_object()
mysql_fetch_object()函數以一個對象的形式返回一條結果記錄,
它的各個字段需要以$row->colname的方式進行訪問。
這4個函數的共同點是:每次調用將自動返回下一條結果記錄,但如果已經到達結果數據表的末尾,則返回FALSE。
5.mysql_free_result()
PHP會把查詢的結果一直保存到腳本執行結束。如果要提前釋放某次查詢結果(例如在某個腳本裡已經進行了大量查詢),可以用mysql_free_result()函數提前釋放它。
6. mysql_num_rows()
mysql_num_rows()函數用於獲取查詢返回的記錄數;
7. mysql_insert_id()
mysql_insert_id()函數用於獲取INSERT 操作產生的 ID ;
8. mysql_affected_rows ()
mysql_affected_rows ()函數用於獲取前一次 MySQL 操作所影響的記錄數 ;
DEMOS
讀取數據的例子
例:讀取數據
//******鏈接mySQL******
$conn = @mysql_connetc(“localhost”, “root”, “123456”); //一般寫四個參數 主機名 , 根權限 , 密碼 , 數據庫名 密碼為空可以不寫
//******判斷數據鏈接是否成功******
if($conn == FALSE){
echo “數據庫連接失敗!“;
exit;
};
//******選擇數據庫******
mysql_select_db(“test”);
//******執行SQL******
$result = @mysql_query(“SELECT * FROM user”); //這行代碼也就是從"user"數據庫中取出所有的數據 並用$result存儲 可以類比js認為$result是一個數組對象
//******顯示查詢結果******
if(mysql_num_rows($result) > 0){ //使用mysql_num_rows($result) 函數也就說把查詢從數據庫中取出來的"數組對象"的長度
While($row = mysql_fetch_array($result)){
echo $row["username"];
echo "<br />";
};
};
//******釋放結果集******
mysql_free_result($result); //這行代碼類似於將$result這個"數組對象"置空
//******關閉連接******
mysql_close();
插入數組的例子
$conn = @mysql_connetc("localhost","root","123456")or die("數據庫連接敗!");
mysql_select_db("test");
//定義了一行數據並插入數據庫
$username = 'admin';
$password = '123456';
$reg_time = time();
$sql = "INSERT INTO user (username, password, reg_time) VALUES ('$username', '$password', $reg_time)";
//插入結果給$result
$result = mysql_query($sql);
If($result) {
echo "添加成功";
};
mysql_close();
更新數據的例子
$conn = @mysql_connetc("localhost", "root", "123456") or die("數據庫連接失敗!");
mysql_select_db("test");
$newname = 'root';
//選取id=1的數據 並選擇username的字段改變其值
$sql = "UPDATE user SET username='$newname' WHERE id = 1";
$result = mysql_query($sql);
if(mysql_affected_rows() > 0) {
echo "編輯成功";
}
mysql_close();
刪除數據
$conn = @mysql_connetc("localhost","root","123456") or die("數據庫連接失敗!");
mysql_select_db("test");
//選取id=1的數據 並刪除該數據
$sql = "DELETE FROM user WHERE id = 1";
$result = mysql_query($sql);
if(mysql_affected_rows() > 0) {
echo “刪除成功”;
}
mysql_close();