MySQL數據庫技術(第3版)課件 單元9、10 數據庫管理、數據庫應用_第1頁
MySQL數據庫技術(第3版)課件 單元9、10 數據庫管理、數據庫應用_第2頁
MySQL數據庫技術(第3版)課件 單元9、10 數據庫管理、數據庫應用_第3頁
MySQL數據庫技術(第3版)課件 單元9、10 數據庫管理、數據庫應用_第4頁
MySQL數據庫技術(第3版)課件 單元9、10 數據庫管理、數據庫應用_第5頁
已閱讀5頁,還剩77頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單元9數據庫管理項目知識要點與目標項目知識要點知識能力目標學時任務1用戶和數據安全性1添加和刪除用戶2授予權限和回收權限任務2備份與恢復1備份和恢復需求分析2數據庫備份和恢復3MySQL日志任務3事務和鎖1事務處理2事務隔離機制3鎖機制【典型工作任務】

數據庫日常管理【技能要求】1用戶賬戶管理2角色管理3權限管理4數據備份與恢復【知識要求】:1數據庫用戶賬戶設置和管理2權限的合理分配與收回

3理解事務和鎖機制4項目實訓“員工管理系統”數據庫管理2用戶和數據安全性用戶要訪問MySQL數據庫,首先必須擁有登錄到MySQL服務器的用戶名和口令。登錄到服務器后,MySQL允許用戶在其權限內使用數據庫資源。MySQL的安全系統很靈活,它允許以多種不同的方式創建用戶和設置用戶權限。可以使用CREATEUSER語法添加一個或多個用戶,并設置相應的密碼。語法格式:CREATEUSER用戶名[IDENTIFIEDBY'密碼']

用戶名的格式為:用戶名稱@主機名。CREATEUSER用于創建新的MySQL賬戶。CREATEUSER會在系統本身的mysql數據庫的user表中添加一個新記錄。要使用CREATEUSER,必須擁有mysql數據庫的全局CREATEUSER權限或INSERT權限。如果賬戶已經存在,則出現錯誤。添加用戶舉例【例】添加兩個新的用戶,king的密碼為queen,palo的密碼為530415CREATEUSER'king'@'localhost'IDENTIFIEDBY'queen','palo'@'localhost'IDENTIFIEDBY'530415‘;在用戶名的后面聲明了關鍵字localhost。這個關鍵字指定了用戶創建的使用MySQL的連接所來自的主機。如果一個用戶名和主機名中包含特殊符號如“_”,或通配符如“%”,則需要用單引號將其括起。“%”表示一組主機。如果兩個用戶具有相同的用戶名但主機不同,MySQL將其視為不同的用戶,允許為這兩個用戶分配不同的權限集合。如果沒有輸入密碼,那么MySQL允許相關的用戶不使用密碼登錄。但是從安全的角度并不推薦這種做法。剛剛創建的用戶還沒有很多權限。它們可以登錄到MySQL,但是它們不能使用USE語句來讓用戶已經創建的任何數據庫成為當前數據庫,因此,它們無法訪問那些數據庫的表,只允許進行不需要權限的操作,例如,用一條SHOW語句查詢所有存儲引擎和字符集的列表。用戶的修改與刪除刪除用戶語法格式:DROPUSERuserDROPUSER語句用于刪除一個或多個MySQL賬戶,并取消其權限。要使用DROPUSER,必須擁有mysql數據庫的全局CREATEUSER權限或DELETE權限。【例】刪除用戶king。

DROPUSERking@localhost;如果刪除的用戶已經創建了表、索引或其他的數據庫對象,它們將繼續保留,因為MySQL并沒有記錄是誰創建了這些對象。可以使用RENAMEUSER語句來修改一個已經存在的SQL用戶的名字。語法格式:

RENAMEUSER

old_user

TOnew_user【例】將用戶palo修改為ken。RENAMEUSER‘palo’@‘localhost’TO‘ken’@‘localhost’;若要將命令立即生效,可用命令:Flushprivileges;修改密碼要修改某個用戶的登錄密碼,可以使用SETPASSWORD語句。語法格式:

SETPASSWORD

[FOR用戶名]=

'密碼'如果不加FOR

用戶名,表示修改當前用戶的密碼。加了則是修改當前主機上的特定用戶的密碼。用戶名的值必須以‘用戶名稱’@‘主機名'的格式給定。【例】將用戶ken的密碼修改為queen。

SETPASSWORDFOR'ken'@'localhost'='queen';授予權限新的SQL用戶不允許訪問屬于其他SQL用戶的表,也不能立即創建自己的表,它必須被授權。可以授予的權限有以下幾組。(1)列權限:和表中的一個具體列相關。(2)表權限:和一個具體表中的所有數據相關。(3)數據庫權限:和一個具體的數據庫中的所有表相關。(4)用戶權限:和MySQL所有的數據庫相關。給某用戶授予權限可以使用GRANT語句。使用SHOWGRANTS語句可以查看當前賬戶擁有什么權限。GRANT語法格式:GRANT權限1[(列名列表1)][,權限2[(列名列表2)]]...ON[目標]{表名|*|*.*|庫名.*}TO用戶1[IDENTIFIEDBY[PASSWORD]'密碼1'][,用戶2[IDENTIFIEDBY[PASSWORD]'密碼2']]...[WITH權限限制1[權限限制2]...]授予權限舉例【例】授予用戶user1在Book表上的SELECT權限。USEBookstore;GRANTSELECTONBookTOuser1@localhost;

若在TO子句中給存在的用戶指定密碼,則新密碼將原密碼覆蓋。如果權限授予了一個不存在的用戶,MySQL會自動執行一條CREATEUSER語句來創建這個用戶,但必須為該用戶指定密碼。【例】授予user1在Book表上的圖書編號列和書名列的UPDATE權限。

GRANTUPDATE(圖書編號,書名) ONBook TOuser1@localhost;授予數據庫權限(2)授予數據庫權限在GRANT語法格式中,授予數據庫權限時ON關鍵字后面跟“*”和“庫名.*”。“*”表示當前數據庫中的所有表;“庫名.*”表示某個數據庫中的所有表。【例】授予user1在Bookstore數據庫中的所有表的SELECT權限。

GRANTSELECTONBookstore.*TOuser1@localhost;這個權限適用于所有已有的表,以及此后添加到Bookstore數據庫中的任何表。【例】授予user1在Bookstore數據庫中擁有所有的數據庫權限。USEBookstore;GRANTALLON*TOuser1@localhost;授予用戶權限(3)授予用戶權限最有效率的權限就是用戶權限,對于需要授予數據庫權限的所有語句,也可以定義在用戶權限上。例如,在用戶級別上授予某人CREATE權限,這個用戶可以創建一個新的數據庫,也可以在所有的數據庫(而不是特定的數據庫)中創建新表。MySQL授予用戶權限時priv_type還可以是以下值。●CREATEUSER:給予用戶創建和刪除新用戶的權力。●SHOWDATABASES:給予用戶使用SHOWDATABASES語句查看所有已有的數據庫的定義的權利。在GRANT語法格式中,授予用戶權限時ON子句中使用“*.*”,表示所有數據庫的所有表。【例】授予Peter對所有數據庫中的所有表的CREATE、ALTERT和DROP權限。GRANTCREATE,ALTER,DROPON*.*TOPeter@localhostIDENTIFIEDBY'ppwd';【例】授予Peter創建新用戶的權力。GRANTCREATEUSERON*.*TOPeter@localhost;權限的轉移和限制GRANT語句的最后可以使用WITH子句。如果指定為WITHGRANTOPTION,則表示TO子句中指定的所有用戶都有把自己所擁有的權限授予其他用戶的權利,而不管其他用戶是否擁有該權限。【例8.11】授予user3在Book表上的SELECT權限,并允許其將該權限授予其他用戶。首先在root用戶下授予user3用戶SELECT權限:

GRANTSELECTONBookstore.BookTOuser3@localhostIDENTIFIEDBY'123456'WITHGRANTOPTION;接著,以user3用戶身份登錄MySQL,登錄后,user3用戶只有查詢Bookstore數據庫中Book表的權利,它可以把這個權限傳遞給其他用戶(這里假設用戶Jim已經創建):GRANTSELECTONBookstore.BookTOJim@localhost;權限的限制WITH子句也可以對一個用戶授予使用限制,其中,MAX_QUERIES_PER_HOUR次數表示每小時可以查詢數據庫的次數;MAX_CONNECTIONS_PER_HOUR次數

表示每小時可以連接數據庫的次數;MAX_UPDATES_PER_HOUR次數表示每小時可以修改數據庫的次數。MAX_USER_CONNECTIONS次數表示同時連接MySQL的最大用戶數。次數是一個數值,對于前三個指定,次數如果為0則表示不起限制作用。【例】授予Jim每小時只能處理一條SELECT語句的權限。GRANTSELECTONBookTOJim@localhostWITHMAX_QUERIES_PER_HOUR1;

回收權限要從一個用戶回收權限,但不從USER表中刪除該用戶,可以使用REVOKE語句,這條語句和GRANT語句格式相似,但具有相反的效果。要使用REVOKE,用戶必須擁有mysql數據庫的全局CREATEUSER權限或UPDATE權限。用來回收某些特定的權限語法格式:REVOKE權限1[(列名列表1)][,權限2[(列名列表2)]]...ON{表名|*|*.*|庫名.*}FROM用戶1[,用戶2]...回收所有該用戶的權限語法格式:REVOKEALLPRIVILEGES,GRANTOPTIONFROM用戶名【例】回收用戶user3在Book表上的SELECT權限。

REVOKESELECTONBookFROMuser3@localhost;備份與恢復備份和恢復需求分析數據庫中的數據丟失或被破壞可能是由于以下原因:(1)計算機硬件故障。由于使用不當或產品質量等原因,計算機硬件可能會出現故障,不能使用。如硬盤損壞會使得存儲于其上的數據丟失。(2)軟件故障。由于軟件設計上的失誤或用戶使用的不當,軟件系統可能會誤操作數據引起數據破壞。(3)病毒。破壞性病毒會破壞系統軟件、硬件和數據。(4)誤操作。如用戶誤使用了諸如DELETE、UPDATE等命令而引起數據丟失或破壞。(5)自然災害。如火災、洪水或地震等,它們會造成極大的破壞,會毀壞計算機系統及其數據。(6)盜竊。一些重要數據可能會遭竊。因此,必須制作數據庫的復本,即進行數據庫備份,在數據庫遭到破壞時能夠修復數據庫,即進行數據庫恢復,數據庫恢復就是把數據庫從錯誤狀態恢復到某一正確狀態。備份和恢復數據庫也可以用于其他目的,如可以通過備份與恢復將數據庫從一個服務器移動或復制到另一個服務器。MySQL數據庫備份有多種可能會導致數據表的丟失或者服務器的崩潰,一個簡單的DROPTABLE或者DROPDATABASE的語句,就會讓數據表化為烏有。更危險的是DELETE*FROMtable_name,可以輕易地清空數據表,而這樣的錯誤是很容易發生的。因此,擁有能夠恢復的數據對于一個數據庫系統來說是非常重要的。MySQL有三種保證數據安全的方法。(1)數據庫備份:通過導出數據或者表文件的拷貝來保護數據。(2)二進制日志文件:保存更新數據的所有語句。(3)數據庫復制:MySQL內部復制功能建立在兩個或兩個以上服務器之間,通過設定它們之間的主從關系來實現的。其中一個作為主服務器,其他的作為從服務器。本章主要介紹前兩種方法。數據庫恢復就是當數據庫出現故障時,將備份的數據庫加載到系統,從而使數據庫恢復到備份時的正確狀態。恢復是與備份相對應的系統維護和管理操作,系統進行恢復操作時,先執行一些系統安全性的檢查,包括檢查所要恢復的數據庫是否存在、數據庫是否變化及數據庫文件是否兼容等,然后根據所采用的數據庫備份類型采取相應的恢復措施。數據庫備份SQL語句用戶可以使用SELECTINTO…OUTFILE語句把表數據導出到一個文本文件中,并用LOADDATA…INFILE語句恢復數據。SELECT*INTOOUTFILE'文件名'輸出選項 |DUMPFILE'文件名'其中,輸出選項為:[FIELDS[TERMINATEDBY'string'][[OPTIONALLY]ENCLOSEDBY'char'][ESCAPEDBY'char']][LINESTERMINATEDBY'string']但是這種方法只能導出或導入數據的內容,不包括表的結構,如果表的結構文件損壞,則必須先恢復原來的表的結構。LOADDATA…INFILE語句是SELECTINTO…OUTFILE語句的補語,該語句可以將一個文件中的數據導入到數據庫中。LOADDATAINFILE'文件名.txt'INTOTABLE表名[FIELDS[TERMINATEDBY'string'][[OPTIONALLY]ENCLOSEDBY'char'][ESCAPEDBY'char']][LINES[STARTINGBY'string'][TERMINATEDBY'string']]數據恢復SQL語句【例】備份Bookstore數據庫中的Members表中數據到D盤myfile1.txt數據格式采用系統默認。首先導出數據:USEBookstore;SELECT*FROMMembersINTOOUTFILE'D:/myfile1.txt‘;

導出成功后可以查看D盤FILE文件夾下的myfile1.txt文件。【例】文件備份完后可以將文件中的數據導入到member_copy表。先創建member_copy表結構:CREATETABLEmember_copyLIKEmembers;

然后使用LOADDATA命令將D盤myfile1.txt中數據恢復到Bookstore數據庫的Member_copy表中。

LOADDATAINFILE'D:/myfile1.txt' INTOTABLEmember_copy;數據備份與恢復SQL語句舉例【例】備份Bookstore數據庫中的Members表中數據到D盤FILE目錄中,要求字段值如果是字符就用雙引號標注,字段值之間用逗號隔開,每行以“?”為結束標志。

USEBookstore;SELECT*FROMMembers INTOOUTFILE'D:/myfile2.txt' FIELDSTERMINATEDBY',' OPTIONALLYENCLOSEDBY'"' LINESTERMINATEDBY'?‘;數據備份與恢復SQL語句舉例【例】將D盤myfile1.txt中數據恢復到Bookstore數據庫的Member_copy1表中。

先創建member_copy1表結構:CREATETABLEmember_copy1LIKEmembers;

然后使用LOADDATA命令將D盤myfile1.txt中數據恢復到Bookstore數據庫的Member_copy1表中。LOADDATAINFILE'D:/myfile1.txt' INTOTABLEmember_copy1 FIELDSTERMINATEDBY',' OPTIONALLYENCLOSEDBY'"' LINESTERMINATEDBY'?';數據備份與恢復SQL語句舉例日志文件啟用日志二進制日志可以在啟動服務器的時候啟用,這需要修改C:\ProgramFiles\MySQL文件夾中的my.ini選項文件。打開該文件,找到[mysqld]所在行,在該行后面加上以下格式的一行:log-bin[=filename]假設這里filename取名為bin_log。若不指定目錄,則在MySQL的data目錄下自動創建二進制日志文件。若日志路徑指定為C:/appserv/MySQL/bin目錄,添加以下一行:log-bin=C:/appserv/MySQL/bin/bin_log保存,重啟服務器。日志文件記入文件中的信息類型錯誤日志記錄啟動、運行或停止mysqld時出現的問題。查詢日志記錄建立的客戶端連接和執行的語句。更新日志記錄更改數據的語句。不贊成使用該日志。二進制日志記錄所有更改數據的語句。還用于復制。慢日志記錄所有執行時間超long_query_time秒的所有查詢或不使用索引的查詢MySQL日志文件類型用mysqlbinlog管理日志使用mysqlbinlog實用工具(在windows命令行窗口運行)可以檢查二進制日志文件。命令格式為:

mysqlbinlog[options]日志文件名說明:日志文件名是二進制日志的文件名。例如,運行以下命令可以查看bin_log.000001的內容:mysqlbinlogbin_log.000001由于二進制數據可能非常龐大,無法在屏幕上延伸,可以保存到文本文件中:mysqlbinlogbin_log.000001>D:/lbin-log000001.txt使用日志恢復數據的命令格式如下:mysqlbinlog[options]日志文件名|mysql[options]日志管理舉例【例】數據數據備份與恢復舉例:數據備份過程如下:①在星期一下午1點進行數據庫Bookstore的完全備份,備份文件為file.sql。②從星期一下午1點開始用戶啟用日志,bin_log.000001文件保存了從星期一下午1點以后的所有更改。③在星期三下午1點時數據庫崩潰。現要將數據庫恢復到星期三下午1點時的狀態。恢復步驟如下:①首先將數據庫恢復到星期一下午1點時的狀態。②然后使用以下命令將數據庫恢復到三下午1點時的狀態:mysqlbinlogbin_log.000001日志管理命令由于日志文件要占用很大的硬盤資源,所以要及時將沒用的日志文件清除掉。以下這條SQL語句用于清除所有的日志文件:RESETMASTER;如果要刪除部分日志文件,可以使用PURGEMASTERLOGS語句。語法格式為:PURGE{MASTER|BINARY}LOGSTO'日志文件名’用于刪除日志文件名指定的日志文件。或PURGE{MASTER|BINARY}LOGSBEFORE'日期’

用于刪除時間在日期之前的所有日志文件。【例】刪除2016年5月23日星期一下午1點之前的部分日志文件。PURGEMASTERLOGSBEFORE'2016-05-2313:00:00';事務管理事務ACID屬性原子性(A):原子性意味著每個事務都必須被認為是一個不可分割的單元。一致性(C):不管事務是完全成功完成還是中途失敗,一致性屬性保證了數據庫從不返回一個未處理完的事務。隔離性(I):隔離性是指每個事務在它自己的空間發生,和發生在系統中的其他事務隔離,而且事務的結果只有在它完全被執行時才能看到。持久性(D):事務完成后,所做的修改對數據的影響是永久的,即使系統重啟或者出現系統故障,數據都可以恢復。添加雇員事務流程事務處理在MySQL中,用戶必須關閉自動提交,事務才能由多條SQL語句組成。使用如下語句關閉自動提交:SET@@AUTOCOMMIT=0;開始事務當一個應用程序的第一條SQL語句或者在COMMIT或ROLLBACK語句后的第一條SQL執行后,一個新的事務也就開始了。另外還可以使用一條STARTTRANSACTION語句來顯示地啟動一個事務。

其格式為:STARTTRANSACTION結束事務:COMMITCOMMIT語句是提交語句,它使得自從事務開始以來所執行的所有數據修改成為數據庫的永久部分,也標志一個事務的結束。MySQL使用的是平面事務模型,因此嵌套的事務是不允許的。在第一個事務里使用STARTTRANSACTION命令后,當第二個事務開始時,自動地提交第一個事務。撤消事務:

ROLLBACK回滾事務:ROLLBACKTOSAVEPOINT向已命名的保存點回滾一個事務。如果在保存點被設置后,當前事務對數據進行了更改,則這些更改會在回滾中被撤銷。事務處理舉例【例】開啟一個事務,更新Members表中張三的密碼為“1111111”,再回滾,查看其結果。

SET@@AUTOCOMMIT=0;SELECT密碼AS事務前密碼FROMBookstore.MembersWHERE姓名='張三';BEGIN;UPDATEBookstore.MembersSET密碼='111111'WHERE姓名='張三';SELECT密碼AS事務中密碼FROMBookstore.MembersWHERE姓名='張三';ROLLBACK;SELECT密碼AS事務后密碼

FROMMembersWHERE姓名='張三';事務隔離級別SQL標準定義了4中隔離級別:序列化(SERIALIZABLE)可重復讀(REPEATABLEREAD)提交讀(READCOMMITTED)未提交讀(READUNCOMMITTED)MySQL的InnoDB事務隔離級別設置的語法格式如下:語法格式:SET[GLOBAL|SESSION]TRANSACTIONISOLATIONLEVELSERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED鎖機制1.鎖的類型

(1)共享鎖

共享鎖的粒度是行或者元祖(多個行)。一個事務獲取了共享鎖之后,可以對鎖定范圍內的數據執行讀操作。(2)排他鎖

排他鎖的粒度與共享鎖相同,也是行或者元祖。一個事務獲取了排他鎖之后,可以對鎖定范圍內的數據執行寫操作。(3)意向鎖

意向鎖是一種表鎖,鎖定的粒度是整個表,分為意向共享鎖和意向排他鎖兩類。意向表示事務想執行操作但還沒有真正執行。2.鎖粒度

鎖的粒度主要分為表鎖和行鎖。

單元10數據庫應用項目知識要點與目標項目知識要點知識能力目標學時任務1PHP編程基礎1PHP語言元素2PHP網頁處理技術任務2PHP數據庫處理1PHP數據庫處理技術2PHP數據庫編程任務3數據庫編程實戰1網絡圖書銷售系統實例2學生成績管理系統實戰【典型工作任務】

數據庫編程實例【技能要求】1PHP網頁處理技術2PHP數據庫編程【知識要求】1PHP編程基礎2PHP網頁處理3PHP數據庫編程4項目實訓“學生成績管理系統”實戰2一個簡單的PHP程序:e6_1.php<?phpecho"helloworld!<BR>";echodate("Y年m月d日H時i分s秒");?>

一個簡單的PHP腳本PHP網頁程序的標記塊可以采用以下兩種格式:<?PHP

?>(2)<scriptlanguage="php">

</script>1.以記事本編輯文件e6_1.php,存放在c:\wamp\www文件夾中2.打開瀏覽器,輸入地址:http://localhost/e6_1.php34PHP網頁程序

PHP網頁程序的語句是嵌入到HTML網頁程序標記中的。

1.PHP語句必須寫在PHP開始標記與PHP結束標記之間構成PHP語句體,規范的書寫格式是一條PHP語句占一行。2.除控制語句外,一條PHP語句必須以分號(“;”)結束,一行可以寫多條語句。3.為了便于理解和閱讀程序,在PHP網頁程序中注釋語句可以采用以下兩種方式:(1)/*多行注釋語句*/

注釋的內容可以占多行。(2)//一行注釋語句注釋的內容只能占一行。35PHP語言元素1.變量名

(1)所有變量名的首字母必須是“$”符號,第2個字符不能是數字符號,但可以是“_”(下劃線)或字母;例如,$book_no、$_id、$phone、$a1是合法的變量名。但是變量名book_no、$12book是非法的變量名。(2)給變量賦值的方法。$book_name="計算機基礎";//$book_name字符串變量。$jia_ge=25;$shu_liang=200;

$zi_jin=$jia_ge*$shu_liang;/*$jia_ge,$shu_liang,$zi_jin數值變量*/36PHP語言元素2.運算符

(1)算術運算:

如果$x=20,$y=4,結果是針對$x、$y進行的運算如下:符號說明符號說明+加法運算,$x+$y的結果是24。-減法運算,$x-$y的結果是16。*乘法運算,$x*$y的結果是80。/除法運算,$x/$y的結果是5。%取余數運算,$x%$y的結果是0。**冪運算,$x**2的結果是400。37(2)邏輯運算符

邏輯運算操作的結果是“1”或“0”,分別表示“true”或“false”。符號1符號2說明示例說明==全等比較$x==$y判斷兩個變量的結果是否相等。not!非運算!$x如果$x是“1",那么示例的結果是“0";如果$x是“0",那么示例的結果是“1"。or||或運算$x||$y如果$x或$y任一是“1",那么示例的結果是“1",否則示例的結果是“0"。and&&與運算$x&&$y如果$x和$y都是“1",那么示例結果是“1",否則示例的結果是“0"。xor異或運算$xxor$y如果$x和$y不相同,那么示例結果是“1",否則示例的結果是“0"。PHP語言元素38(3)組合賦值運算符運算符說明示例展開式+=加法操作$x+=5$x=$x+5-=減法操作$x-=5$x=$x-5*=乘法操作$x*=5$x=$x*5/=除法操作$x/=5$x=$x/5%=取余數操作$x%=5$x=$x%5.=字符連接操作$x.="ab"$x=$x."ab"PHP語言元素39

3.數組的定義一維數組變量:$data[5]共有5個單元,分別是:

$data[0]、$data[1]、$data[2]、$data[3]、$data[4]二維數組變量:$data[4][3],因為$data有兩個下標,共有12個單元,分別是:

$data[0,0]、$data[0,1]、$data[0,2]、$data[1,0]、$data[1,1]、$data[1,2]、$data[2,0]、$data[2,1]、$data[2,2]、$data[3,0]、$data[3,1]、$data[3,2]。PHP語言元素40(1)數組定義與賦值:①利用賦值語句

$d[0]=123;$d[1]=456;$d[2]=789;②利用array()函數

$d=array(123,456,789);此時$d共3個單元,$d[0]=123、$d[1]=456、$d[2]=789。$city=array(“北京”,“上海”,“天津”,“重慶”);此時$city共4個單元,其中$city[0]="北京"、$city[1]="上海"、$city[2]="天津"、$city[3]="重慶"。二維數組$v[3][3]的方法是:$v=array(array(23,27,24),array(14,16,19),array(31,35,33));PHP語言元素41(2)顯示數組的值:print_r(數組變量名)print_r($d);(3)計算數組元素的個數:count(數組變量名)例如,下列語句顯示$d的元素個數:count($d);(4)計算數組元素的總和:array_sum(數組變量名)

array_sum($d);(5)對數組元素進行升序排序:asort(數組變量名)

asort($d);PHP語言元素42PHP語言元素4.函數(1)echo/print是顯示函數,用于顯示一個或多個變量的值。格式:echo<字符串1>,<字符串1>,…,<字符串n>(2)die/exit函數是顯示函數,其職能與echo、print函數的職能相同,但是die/exit函數執行完畢后直接結束程序。格式:die/exit(<字符串1>,<字符串1>,…,<字符串n>)(3)include函數是文件包含函數,用于將一個已經存在的網頁程序語句調入到本程序中執行,利用include函數可以實現不同網頁程序間的數據交換。格式:include<文件名>43分支結構1.單分支語句

if(〈條件表達式〉){〈分支結構語句體〉}【例】設計文件名是“e6_5_2.php”的網頁程序,給定一個身份證號顯示持證人的年齡和性別信息。<?php$id=;echo"<BR>身份證號:",$id; echo"<BR>年齡:",date("Y")-substr($id,6,4);/*根據身份證號的第17位是奇數還是偶數顯示性別*/ if(substr($id,16,1)%2==0) echo"<BR>性別:女"; else echo"<BR>性別:男";?>

44

2.雙分支語句

if(〈條件表達式〉){〈分支結構語句體1〉}else{ 〈分支結構語句體2〉}3.多分支語句

switch(〈條件表達式〉){case值1:

〈分支結構語句體1〉break;case值2:

〈分支結構語句體2〉break;…default: 〈分支結構語句體n〉break;}分支結構45循環結構1.while語句格式:

while(<循環條件表達式>):<循環結構語句體>endwhile;【例】設計文件名是“e6_5_3.php”的網頁程序,計算100以內整數的和。<?php$s=0;$i=1;while($i<=100){$s=$s+$i;$i=$i+1;}echo"100以內整數和:",$s;?>462.for語句for([<循環初值>];<循環條件表達式>;<修改循環條件>){<循環體語句>}循環結構【例】設計文件名是“e6_5_4.php”的網頁程序,利用隨機數函數rand()產生10個隨機數,然后將它們逆序顯示。<?phpecho"利用隨機數函數產生10個隨機數:<BR>";for($i=0;$i<10;$i++){ $d[$i]=rand();/*產生一個隨機數保存到數組*/ echo$d[$i],"";}/*逆序顯示10個隨機數,從數組的最大單元開始顯示數據*/echo"<BR>逆序顯示10個隨機數:<BR>";for($i=9;$i>=0;$i--)/*單元地址數遞減*/ echo$d[$i],"";?>47

3.do…while語句do{<循環體語句>}while(<循環條件表達式>);【例】設計文件名是“e6_5_5.php”的網頁程序,利用隨機數函數產生10個隨機數,顯示它們的和、平均數、偶數個數和奇數個數。<?php$s1=0;$s2=0;/*$s1表示偶數個數,$s2表示奇數個數*/$s=0;$i=0;/*$s表示隨機數的總和,$i表示初始變量*/do{$k=rand(); echo$k,"";$s=$s+$k;/*累計求和*/ if($k%2==0)/*判別某數是否為偶數取得余數判斷其是否為零即可。*/$s1=$s1+1;else$s2=$s2+1;$i=$i+1;}while($i<10);echo"<BR>上述十個隨機數的總和是:",$s,"平均數是:",$s/10;echo"<BR>上述隨機數偶數個數是:",$s1,"奇數個數是:",$s2;?>循環結構48PHP語言與網頁程序“注冊”處理過程客戶端服務器網頁程序(.html)數據處理(.php)網頁程序(html表單):

供用戶輸入個人資料。

如名稱、密碼、身份證號、電話、住址、職業。數據處理(php程序):

輸入內容進行檢測。

如果輸入的數據不規范,提示重新輸入資料;如果輸入的數據符合規范,保存數據到數據庫中。49【例】設計靜態網頁程序e7_2_1.htm,包括兩個文本框:①名稱是“u_id”的文本框:用于輸入身份證號。②名稱是“u_pwd”的文本框:用于輸入會員密碼。輸入完相關信息,點擊“提交”按鈕后,調用動態網頁處理程序e7_2_1.php檢驗輸入數據的有效性:身份證號是18個字符,會員密碼是6個字符。文本框50(1)“身份證號”,“會員密碼”文本框在htm網頁文件中代碼:

<p>身份證號:<inputname="u_id"type="text"size="20"maxlength="18"><br></p><p>會員密碼:<inputname="u_pwd"type="password"size="20"maxlength="6"><br></p>文本框顯示名稱變量名稱變量類型字體大小文本框長度身份證號:存入變量u_id中。

會員密碼:存入變量u_pwd中。51(2)網頁程序中用表單標記<form>,指明數據的傳送方式和數據處理的網頁程序文件名。<formaction="數據處理程序文件名"method="表單數據的傳送方式">代碼如下:<formaction="e7_2_1.php"method="GET">(3)數據的傳送方式采用“POST”方式還是“GET”方式;(4)網頁頁面中需要設計“提交”命令按鈕,將客戶端輸入的數據傳送到服務器端,交付給處理數據的網頁程序處理,以此實現數據的交互處理。語句如下:<inputname="submit"type="submit"value="提交">文本框e7_2_1.htm代碼如下:<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><formaction="e7_2_1.php"method="GET"><p>會員登陸</p><hr><p>身份證號:<inputname="u_id"type="text"size="20"maxlength="18"><br></p><p>會員密碼:<inputname="u_pwd"type="password"size="20"maxlength="6"><br></p><p><inputname="submit"type="submit"value="提交"></form></body></html>文本框53e7_2_1.php數據處理程序:(1)e7_2_1.htm網頁程序輸入的數據保存在“u_id”和“u_pwd”變量中,通過“GET”方式提交后交由e7_2_1.php數據處理程序處理,對應的變量名分別是$_GET[“u_id”]和$_GET[“u_pwd”]。(2)判斷變量值是否是空值:empty($_GET[“變量名”]);判斷變量值的字符個數:strlen(trim($_GET[“變量名”]));判斷變量的值是否是數字字符:is_numeric($_GET[“變量名”])函數;顯示提示信息并中斷程序的執行:die語句。文本框54e7_2_1.php<?php

if(empty($_GET['u_id']))/*如果身份證號是空。*/

die("身份證號不能是空。");/*顯示錯誤提示并終止程序。*/if(strlen(trim($_GET['u_id']))!=18)/*如果身份證號不是18個字符。*/

die("身份證號應是18個字符。"); /*顯示錯誤提示并終止程序。*/if(is_numeric($_GET['u_id'])!=1)/*如果身份證號不是數字字符。*/

die("會員編號應為數字字符。"); /*顯示錯誤提示并終止程序。*/echo"<br>";

if(empty($_GET['u_pwd']))/*如果用戶密碼是空。*/

die("會員密碼不能是空。");/*顯示錯誤提示并終止程序。*/if(strlen($_GET['u_pwd'])!=6)/*如果密碼不等于6個字符*/

die("會員密碼至少為6個字符。");/*顯示錯誤提示并終止程序。*//*顯示身份證號和會員密碼。也可以存儲到數據庫。*/

echo"您輸入的身份證號是:".$_GET['u_id']."<br>"; echo"您輸入的會員密碼是:".$_GET['u_pwd']."<br>"; echo"您輸入的會員信息符合設計規范。"; ?>文本框55復選框

復選框是用于接收多個選項中選取的多個選項數據的表單元素。【例7.3】網頁程序e7_3_1.htm接收數據的表單元素有7個復選框按鈕,它們的名稱分別是chk1、chk2、chk3、chk4、chk5、chk6、chk7。當點擊“提交”按鈕后,將數據傳遞給數據處理程序e7_3_1.php顯示瀏覽者喜愛的圖書類別。56(1)復選框在htm網頁文件中代碼:

<p><inputname="chk1"type="checkbox"value="計算機基礎">計算機基礎</p><p><inputname="chk2"type="checkbox"value="程序設計語言">程序設計語言</p><p><inputname="chk3"type="checkbox"value="數據庫應用">數據庫應用</p><p><inputname="chk4"type="checkbox"value="網頁設計語言">網頁設計語言</p><p><inputname="chk5"type="checkbox"value="操作系統">操作系統</p><p><inputname="chk6"type="checkbox"value="繪圖軟件">繪圖軟件</p><p><inputname="chk7"type="checkbox"value="其他">其他</p>復選框變量名稱變量類型變量的值復選框的顯示值如果選中復選框1,chk1=“計算機基礎”,否則chk1=‘’;……..如果選中復選框7,chk7=“其他”,否則chk7=‘’;57e7_3_1.php<?php$book="";/*步驟一:將喜愛的圖書類別拼串,構建$book。*/if(!empty($_GET['chk1']))/*判別復選框1是否是空。*/

$book=$book.$_GET['chk1'].";";if(!empty($_GET['chk2']))$book=$book.$_GET['chk2'].";";if(!empty($_GET['chk3']))$book=$book.$_GET['chk3'].";";if(!empty($_GET['chk4']))$book=$book.$_GET['chk4'].";";if(!empty($_GET['chk5']))$book=$book.$_GET['chk5'].";";if(!empty($_GET['chk6']))$book=$book.$_GET['chk6'].";";if(!empty($_GET['chk7']))$book=$book.$_GET['chk7'].";";/*步驟二:顯示喜愛的圖書類別。*/

echo"<br>"."你選擇的喜愛的計算機圖書類別是:"."<br>";

if(empty($book))

echo"無。";

elseecho$book;?>復選框58復選框59選按鈕是用于接收從多個選項中選取一個數據項的表單元素。【例7.4】】設計e7_4_1.htm的網頁程序,設置4個表單單選鈕,分別顯示提示“中國銀行”、“工商銀行”、“招商銀行”、“建設銀行”提示,選擇支付銀行的名稱。(5)在網頁頁面設置“銀行帳號:”的提示,再設置一個文本框用于接收“銀行帳號”的數據;設置“付款金額”提示,再設置一個文本框用于接收“支付金額”的數據。

復選框60(1)單選按鈕在htm網頁文件中代碼:

<inputtype="radio"name="yin_hang"value="中國銀行">中國銀行

<inputtype="radio"name="yin_hang"value="工商銀行">工商銀行

<inputtype="radio"name="yin_hang"value="招商銀行">招商銀行

<inputtype="radio"name="yin_hang"value="建設銀行">建設銀行單選按鈕變量名稱變量類型變量的值單選按鈕的顯示值如果選中單選按鈕1,

yin_hang=“中國銀行”;如果選中單選按鈕2,yin_hang=“工商銀行”;如果選中單選按鈕3,yin_hang=“招商銀行”;如果選中單選按鈕4,yin_hang=“建設銀行”;e7_4_1.php<?phpif(empty($_POST["yin_hang"]))/*判斷付款銀行名稱是否選擇了該按鈕。*/die("您沒有選擇付款銀行的名稱。");if(empty($_POST[“zhang_hao”]))/*檢測是否輸入帳號。*/die("您沒有輸入銀行賬號信息。"."<br>");if(strlen($_POST[“zhang_hao”])<10)/*檢測帳號的位數小于10位*/die("請輸入10位銀行賬號信息。"."<br>");if(!is_numeric($_POST[“jin_e”]))/*檢測輸入金額是不是數值*/die("金額信息應當為數字。"."<br>");if(($_POST["jin_e"])<0)/*檢測輸入的金額<0?*/echo"您輸入的金額小于零。"."<br>";/*顯示銀行名稱、銀行賬號、金額。*/echo"<br>你選擇的付款銀行是:".$yin_hang."<br>";echo"您的銀行賬號信息:".$_POST["zhang_hao"]."<br>";echo"您輸入的金額:".$_POST["jin_e"]."<br>";?>單選按鈕62單選按鈕63

列表/菜單列表/菜單是用于接收從多個列表選項中選取一項或多項數據的表單元素。【例7.5】設計e7_5_1.htm的網頁程序,頁面設置“注冊時間”、“年”、“月”、“日”的提示,并設置三個表單列表框,分別用于接收注冊的“年”、“月”、“日”信息。64(1)單選按鈕在htm網頁文件中代碼:<selectname="select1"size="1"><optionvalue="2007"selected>2007</option><optionvalue="2008">2008</option></select>年變量名稱默認值變量的值列表欄的顯示值如果選中列表框中第一個值,

select1=“2007”;如果選中列表框中第二個值,select1=“2008”;如果沒有選中列表框中任何值,默認為2007被選中,

select1=“2007”;列表/菜單e7_5_1.php<?phpecho"你注冊的時間是:";/*顯示時間。*/if(!empty($_POST['select1'])) echo$_POST['select1']."年";if(!empty($_POST['select2'])) echo$_POST['select2']."月";if(!empty($_POST['select3'])) echo$_POST['select3']."日"."<br>";?>列表/菜單網頁數據交互處理示意圖66數據交互需要做以下處理:(1)連接到MySQL服務器。(2)連接到MySQL數據庫。(3)檢驗輸入數據或提取數據的有效性,

保存、查詢和加工數據表記錄的數據。(4)關閉MySQL服務器。連接MySQL服務器連接MySQL服務器的語句格式:

連接服務器變量=mysql_connect(服務器名,用戶名,訪問密碼)

如,連接本地“localhost”、用戶名是“root”、訪問密碼是“123456”的MySQL服務器的語句如下:

$conn=mysql_connect("localhost","root","123456")為了使程序有通用性,常利用變量引用的方法連接到MySQL服務器:$host=“localhost”;$user=“root”;$password-="123456";$conn=mysql_connect($host,$user,$password)如果成功連接MySQL服務器,$conn的值為ture,否則為false。6768連接MySQL服務器連接MySQL服務器的語句格式:

連接服務器變量=mysqli_connect(服務器名,用戶名,訪問密碼)

如果連接本地服務器,服務器名是“localhost”、用戶名是“root”、訪問密碼為“123456”,則連接MySQL服務器的語句如下:$conn=mysqli_connect("localhost","root","123456")為了程序通用性更好,通常使用變量引用的方法連接MySQL服務器:$host=“localhost”;$user=“root”;$password-="123456";$conn=mysqli_connect($host,$user,$password);

如果成功連接MySQL服務器,$conn的值為ture,否則為false。連接MySQL數據庫

如果連接MySQL服務器成功后,就可以與服務器中的相關數據庫建立連接了。連接MySQL數據庫的語句格式:

mysqli_select_db(MySQL連接服務器變量,數據庫名)或者:$conn=mysqli_connect(服務器名,用戶名,訪問密碼,數據庫名)69關閉MySQL服務器成功連接MySQL服務器后,可以維護服務器存儲的數據庫和數據表的數據,結束操作后,應當關閉MySQL服務器。

提示:關閉MySQL服務器的操作,往往是在PHP程序執行完畢后自動執行的,因此在設計應用程序時可以不必書寫該語句。關閉MySQL服務器的語句格式:mysql_close(連接服務器變量)

70

成功連接上MySQL服務器和服務器中的相關數據庫后,就可以通過調用mysqli_query()函數執行SQL命令,實現對數據庫的操作。函數格式如下:mysqli_query(連接服務器變量,SQL操作語句)

在PHP網頁程序中對MySQL數據庫操作,通常將SQL操作語句保存到變量中(如$mysql_command),然后通過mysql_query($mysql_command)語句得到處理結果,再將這個結果保存在結果變量中(如$result)。$mysql_command="createdatabasemy_test";$result=mysqli_query($conn,$mysql_command)ordie("建立數據庫文件失敗。".mysqli_connect_error());

71執行數據庫操作創建表72【例10.12】設計e10_12.php,在bookstore數據庫中建立數據表my_test,字段為:書號/變長字符串/30、書名/變長字符串/40、單價/數值/5。<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("連接MySQL服務器失敗。".mysqli_connect_error());echo"MySQL服務器:$host用戶名稱:$user<br>";echo"數據庫:$dbase_name<br>";echo"連接MySQL數據庫成功。";echo"數據庫:$dbase_name數據表:$table_name<br>";/*數據表的字段為中文時,進行代碼轉換.*/mysqli_query($conn,"SETNAMES'GB2312'");/*建立數據表$table_name。*/$mysql_command="createtableifnotexists".$table_name;$mysql_command=$mysql_command."(書號varchar(30),書名varchar(40),單價int(5))";$result=mysqli_query($conn,$mysql_command)ordie("建立數據表:$table_name失敗!".mysqli_connect_error());echo"成功建立數據表文件:$table_name";?>插入記錄73【例10.13】對my_test數據表,增加一條記錄,書名是“跟我學網頁設計”、書號是“7-503-06342-1”、單價是27。插入該記錄的SQL語句如下:insertintomy_test(書號,書名,單價)values(‘7-503-06342-1’,’跟我學網頁設計’,27);

將該SQL語句保存到$mysql_command變量:$mysql_command=“insertintomy_test(書號,書名,單價)values(‘7-503-06342-1’,’跟我學網頁設計’,27)”;插入記錄74<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("連接MySQL服務器失敗。".mysqli_connect_error());echo"MySQL服務器:$host用戶名稱:$user<br>";echo"連接MySQL數據庫成功。";echo"數據庫:$dbase_name數據表:$table_name<br>";mysqli_query($conn,"SETNAMES'GB2312'");/*增加記錄。*/$mysql_command="insertinto".$table_name."(書號,書名,單價)values(";$mysql_command=$mysql_command."'7-503-06342-1','跟我學網頁設計',27)";$result=mysqli_query($conn,$mysql_command)or

die("數據表:$table_name增加記錄失敗!".mysqli_connect_error());echo"成功增加數據表".$table_name."記錄。";?>插入記錄程序e10_13.php代碼修改記錄【例10.14】將my_test表中書名是“跟我學網頁設計”的記錄改為“跟我學MySQL數據庫”。<?php$host="localhost";$user="root";$password="123456";$dbase_name="bookstore";$table_name="my_test";$conn=mysqli_connect($host,$user,$password,$dbase_name)ordie("連接MySQL服務器失敗。".mysqli_connect_error());echo"MySQL服務器:$host用戶名稱:$user<br>";echo"連接MySQL數據庫成功。";echo"數據庫:$dbase_name數據表:$table_name<br>";/mysqli_query($conn,"SETNAMES'GB2312'");/*增加記錄。*/$mysql_command="upd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論