宣傳語
編程成功之路從此開始!
內 容 簡 介
本書全面介紹了使用PHP進行Web開發的各種技術。在內容排列上由淺入深,讓讀者循序漸進地掌握編程技術;在內容講解上結合豐富的圖解和形象的比喻,幫助讀者理解“晦澀難懂”的技術;在內容形式上附有大量的提示、技巧、說明、情景套用、實戰練習等欄目,夯實讀者編程技術,豐富編程經驗。全書分為四篇共21章進行介紹。第一篇為基礎篇,包括了解PHP、著手準備開發PHP的條件、了解Web頁面的設計、PHP開發基礎、PHP流程控制語句、字元串操作、正則表達式、初探數組、日期和時間;第二篇為核心篇,包括檔案和目錄處理技術、圖形圖像處理技術、Cookie和會話控制、面向對象、MySQL資料庫設計、資料庫編程技術;第三篇為高級篇,包括PDO資料庫抽象層、ADODB資料庫抽象層、PHP的字元編碼、程式調試與異常處理、Smarty模板技術;第四篇為實戰篇,包括企業網站開發模板。
本書附有配套光碟。光碟中提供本書所有程式的原始碼和重點難點的實例視頻錄像。其中,原始碼全部經過精心測試,能夠在Windows 2000、Windows XP、Windows Server 2003、Windows 7編譯和運行。
本書適用於PHP編程愛好者、初學者和中級開發人員,也可以作為大中專院校和培訓機構的教材。
前 言
讓想要學習編程的人員都能夠學會編程!
我可以學會編程嗎?
當然可以!即使你沒有基礎,即使你是非計算機專業畢業,即使你已過而立之年,甚至是只有國中畢業。我國最早的計算機反病毒專家、江民防毒軟體創始人王江民,國中畢業,38歲開始學習計算機,因為英語基礎不好,很多人認為他根本沒有學會編程的可能。但王江民沒有感覺自己不行,硬是克服各種困難,成為我國最成功的程式開發人員之一。
王江民學習編程的訣竅是什麼?
是實踐。王江民說:“計算機是實踐性非常強的學科。我搞計算機是用計算機,不是學計算機。” 王江民首先學的是BASIC語言。當時,為了輔導上國小的孩子,對軟體一片空白的王江民竟然決定編寫程式代替家長輔導。短短3個月,王江民就邊學邊實踐,編好了一套數學語文教學軟體,試過後效果奇佳,參加電腦報軟體交流,被評為第二名,譽為“教育軟體第一”。因為這次成功,極大激發了王江民對編程的興趣,使他從此把精力轉到了軟體領域。
所以說:實踐,是學習編程的最好方法,也是培養編程樂趣、捕獲發展機遇的最佳途徑。值得注意的是,不要等學完全部知識才去實踐,要隨時學習,隨時實踐,哪怕只學了一點點。
這本書適合我嗎?
非常適合!本書是學習PHP 編程的最佳選擇。所講內容通俗易懂,易於學習,貼近實踐。對於學習中的難點、重點,注意結合實際開發,採用情景套用的方式進行介紹和練習。本書光碟提供了完整的視頻講座,可以對照本書內容循序漸進進行學習。利用本書,不但可以學會編程,更能激發學習者理論聯繫實際的熱情,開發出符合市場需求的軟體和項目。
本書內容
本書分為基礎篇、核心篇、高級篇和實戰篇,共21章。內容安排按照從零起步,循序漸進的學習順序,全面提高讀者學、練、用的能力。本書知識結構如下圖所示。
本書特色
最基礎、最易學
為了讓初學者易於學習,本書力求內容通俗易懂,講解寓教於樂。對於初學者難理解的專業術語,本書都進行了形象的解釋,有些還提供了例圖。書後附錄中又單獨將專業術語提煉出來,供讀者學習時參考。例如,在講解面向對象的繼承特性時,為使讀者更容易理解,筆者定義一個水果類,水果類具有顏色屬性,然後定義一個蘋果類,在定義蘋果類時完全可以不定義蘋果類的顏色屬性,通過如圖2所示的繼承關係完全可以使蘋果類具有顏色屬性。繼承就是派生類(子類)自動繼承一個或多個基類(父類)中的屬性與方法,並可以重寫或添加新的屬性或方法。
語音視頻講座
為了方便讀者學習本書內容,本書配套光碟中提供了12小時的視頻講座。其講解細膩、層次清楚、互動性強,不但可以加深對書中內容的理解,還可以引導讀者掌握“是什麼”、“為什麼”、“怎么辦”、“應注意些什麼”的編程思維能力。所講視頻不僅對書中的內容進行了詳細介紹,還對相關技術進行了有效擴展,對開發中易犯的各種錯誤給出了視頻解決方案。
注重實用性
初學者經常會遇到這樣的情況,書中講解的技術能夠理解,但不知道如何套用。例如,在學習抽象類時,讀者能夠自己定義抽象類並且能夠從抽象類派生子類,但是不知道抽象類能夠做什麼,在哪裡套用抽象類。本書在介紹技術時,注意強調技術的實用性,並且通過實例突出技術的套用價值。對於一些典型的套用,書中通過“情景套用”欄目進行重點介紹。
實戰互動練習
要掌握一項技術,最佳的方式就是多練習、多實踐。本書每章都提供了多個供讀者實踐的實例任務,讀者可以對照檢驗對知識的掌握情況。每個實例任務都分為“題目描述”、“技術指導”和“緊急救援”3部分。其中題目描述給出了實例功能的詳細描述和效果圖,技術指導給出了開發思路和關鍵技術,緊急救援提供了下載實例源碼和開發文檔的地址連結。
超值DVD光碟
為了幫助讀者學習和使用書中的實例,本書配套的DVD光碟中不僅提供有書中所有實例項目的原始碼、素材、光碟使用說明書,還提供了12小時視頻專題錄像及5個項目源碼。光碟目錄如圖3所示。
圖3 光碟目錄
本書適用人群
本書是一部零基礎編程圖書,非常適合以下人員閱讀:
零基礎的初學編程人員 國中級程式開發人員
編程愛好者 想學編程的各企事業單位的在職人員
大中專院校的教師和學生 相關培訓機構的教師和學員
本書參與作者
本書由明日科技組織編寫,參加編寫的有潘凱華、楊明、劉欣、李慧、陳丹丹、李鐘尉、李偉、楊麗、顧麗麗、劉齡齡、孟范勝、董大永、李繼業、尹強、張磊、王小科、王軍、趙會東、劉彬彬、王國輝、盧瀚、朱曉、安劍、鞏建華、劉銳寧、李偉明、梁水、李鑫、孫秀梅、白偉明、張振坤、梁曉嵐、肖鑫、劉瑩、王樂樂、高春艷、宋坤等。由於作者水平有限,疏漏和不足之處在所難免,歡迎廣大讀者提出寶貴意見。
非學無以廣才,非志無以成學。
祝大家讀書快樂!
明日科技
2010年10月
目 錄
第一篇 基礎篇
第1章 了解PHP 18
1.1 什麼是PHP 19
1.2 選擇PHP的理由 19
1.3 如何學好編程 22
1.4 準備PHP的開發條件 24
1.4.1 下載PHP及相關軟體 24
1.4.2 代碼編輯工具 24
1.4.3 下載PHP用戶手冊 26
1.5 本章小結 26
第2章 準備開發PHP的條件 27
2.1 AppServ—Windows版PHP集成化安裝包 28
2.1.1 用AppServ搭建PHP開發環境 28
2.1.2 測試AppServ是否安裝成功 30
2.2 XAMPP—Linux版PHP集成化安裝包 31
2.2.1 用XAMPP搭建PHP開發環境 32
2.2.2 在Linux作業系統下啟動、停止XAMPP 33
2.2.3 設定Linux版XAMPP中MySQL資料庫root用戶的密碼 33
2.2.4 在Linux作業系統下編寫第一個PHP程式 33
2.3 PHP開發環境的關鍵配置信息 34
2.3.1 Apache伺服器的基本配置 34
2.3.2 PHP.INI檔案的基本配置 35
2.4 解決PHP的常見配置問題 36
2.4.1 解決Apache伺服器連線埠衝突 36
2.4.2 更改Apache伺服器
默認存儲的檔案路徑 36
2.4.3 在PHP.INI檔案中更改上傳檔案的大小 37
2.4.4 增加PHP擴展模組 37
2.4.5 檢測PHP是否支持MySQL資料庫 38
2.5 Dreamweaver開發工具 38
2.5.1 情景套用一——Dreamweaver中編碼格式的選擇 38
2.5.2 情景套用二——Dreamweaver創建表格 39
2.5.3 情景套用三——Dreamweaver創建表單 43
2.5.4 情景套用四——Dreamweaver創建站點 45
2.5.5 情景套用五——Dreamweaver創建第一個PHP程式 46
2.6 本章小結 47
第3章 了解Web頁面的設計 48
3.1 XHTML基礎 49
3.1.1 XHTML語言的語法 49
3.1.2 XHTML檔案的結構 51
3.1.3 編輯文字版面 53
3.1.4 插入圖像與連結 55
3.1.5 編寫XHTML表格 57
3.1.6 設計XHTML表單 58
3.1.7 情景套用一——編寫用戶註冊信息頁 61
3.1.8 情景套用二:檔案域上傳檔案 62
3.2 CSS樣式套用 63
3.2.1 將CSS樣式嵌入到HTML中 63
3.2.2 CSS選擇符 65
3.2.3 常見的CSS樣式屬性 67
3.2.4 情景套用——打造經典的導航欄 72
3.3 設計頁面布局 74
3.3.1 <div>和<span>標記 74
3.3.2 區塊模型 74
3.3.3 區塊浮動 75
3.3.4 情景套用——設定一行兩列浮動布局 77
3.4 實戰練習 78
3.4.1 CSS+DIV設計網站首頁 78
3.4.2 DIV標籤設計論壇後台管理頁面 79
3.5 本章小結 81
第4章 PHP開發基礎 82
4.1 PHP的工作原理 83
4.2 學習運用代碼注釋 83
4.2.1 使用PHP注釋 84
4.2.2 使用HTML注釋 84
4.2.3 有效使用注釋 85
4.3 PHP的常量套用 85
4.3.1 聲明和使用常量 85
4.3.2 預定義常量 87
4.4 PHP的變數套用 88
4.4.1 理解變數 88
4.4.2 聲明變數 88
4.4.3 變數作用域 89
4.4.4 可變變數 91
4.5 PHP的數據類型 92
4.5.1 標量數據類型 92
4.5.2 複合數據類型 96
4.5.3 特殊數據類型 97
4.5.4 轉換數據類型 98
4.5.5 檢測數據類型 100
4.6 PHP的運算符 101
4.6.1 算術運算符 101
4.6.2 字元串運算符 102
4.6.3 賦值運算符 102
4.6.4 位運算符 103
4.6.5 遞增或遞減運算符 103
4.6.6 邏輯運算符 104
4.6.7 比較運算符 105
4.6.8 三元運算符 105
4.6.9 運算符的使用規則 106
4.7 PHP的自定義函式 107
4.7.1 定義和調用函式 108
4.7.2 在函式間傳遞參數 109
4.7.3 函式的返回值 110
4.8 實戰練習 111
4.8.1 網站中最新動態模組的中文字元串截取 111
4.8.2 論壇發布內容模組中對內容的格式化輸出 112
4.9 本章小結 113
第5章 PHP流程控制語句 115
5.1 程式三種控制結構 116
5.1.1 順序結構 116
5.1.2 選擇(分支)結構 116
5.1.3 循環結構 116
5.2 條件控制語句 117
5.2.1 if條件控制語句 117
5.2.2 switch多分支語句 119
5.2.3 情景套用一——if語句判斷美女徵婚條件 121
5.2.4 情景套用二——switch網頁框架 122
5.3 循環控制語句 123
5.3.1 while循環語句 124
5.3.2 do...while循環語句 124
5.3.3 for循環語句 125
5.3.4 foreach循環語句 127
5.3.5 情景套用一——while語句循環讀取資料庫中數據 128
5.3.6 情景套用二——for循環語句開發一個乘法口訣表 129
5.4 跳轉語句 130
5.4.1 break跳轉語句 130
5.4.2 continue跳轉語句 131
5.4.3 return跳轉語句 132
5.5 包含語句 133
5.5.1 include()語句 133
5.5.2 require()語句 134
5.5.3 include_once()語句 135
5.5.4 require_once()語句 135
5.5.5 include()語句和require()語句的區別 136
5.5.6 include_once()語句和require_once()語句的區別 138
5.6 實戰練習 138
5.6.1 刪除資料庫中指定的數據表 138
5.6.2 for循環語句實現多圖片上傳 139
5.7 本章小結 140
第6章 字元串操作 141
6.1 初識字元串 142
6.2 轉義、還原字元串 142
6.3 截取字元串 143
6.4 分割、合成字元串 145
6.5 替換字元串 146
6.5.1 str_ireplace()函式 146
6.5.2 substr_replace()函式 148
6.6 檢索字元串 148
6.6.1 strstr()函式 148
6.6.2 substr_count()函式 149
6.7 去掉字元串首尾空格和特殊字元 150
6.7.1 ltrim()函式 150
6.7.2 rtrim()函式 151
6.7.3 trim()函式 152
6.8 字元串與HTML轉換 152
6.9 情景套用 154
6.9.1 超長文本的分頁輸出 154
6.9.2 查詢關鍵字描紅 155
6.9.3 購物車中數據的讀取 156
6.10 實戰練習 157
6.10.1 PHP 5新型字元串輸出XML數據信息 157
6.10.2 圖像驗證碼的相關操作 158
6.11 本章小結 159
第7章 正則表達式 160
7.1 什麼是正則表達式 161
7.2 正則表達式的語法規則 162
7.2.1 行定位符(^和$) 162
7.2.2 單詞定界符(\b、\B) 162
7.2.3 字元類([ ]) 163
7.2.4 選擇字元(|) 163
7.2.5 連字元(-) 163
7.2.6 排除字元([^]) 164
7.2.7 限定符(? * + {n,m}) 164
7.2.8 點號字元(.) 164
7.2.9 轉義字元(\) 165
7.2.10 反斜線(\) 165
7.2.11 括弧字元(()) 166
7.2.12 情景套用一——整合實用的正則表達式 166
7.2.13 情景套用二——調用正則表達式驗證中文 168
7.3 PCRE兼容正則表達式函式 169
7.3.1 字元串的匹配與查找 169
7.3.2 情景套用一——套用正則表達式匹配電話號碼格式 170
7.3.3 字元串的替換 172
7.3.4 情景套用二——套用正則表達式實現UBB使用幫助 173
7.3.5 字元串的分割 173
7.4 實戰練習 174
7.4.1 正則表達式驗證用戶
7.4.1 註冊信息的合理性 174
7.4.2 正則表達式驗證提交的
7.4.1 購買數量是否是正整數 176
7.5 本章小結 177
第8章 初探數組 178
8.1 數組概述 179
8.2 數組類型 179
8.3 聲明數組 180
8.3.1 用戶創建數組 180
8.3.2 函式創建數組 181
8.3.3 創建二維數組 181
8.4 遍歷、輸出數組 182
8.4.1 遍歷數組 183
8.4.2 輸出數組元素 184
8.5 PHP的數組函式 185
8.5.1 統計數組元素個數 185
8.5.2 向數組中添加元素 185
8.5.3 獲取數組中最後一個元素 186
8.5.4 刪除數組中重複元素 186
8.5.5 獲取數組中指定元素的鍵名 186
8.5.6 字元串與數組的轉換 187
8.5.7 情景套用——讀取網上調查中的數據 188
8.6 PHP的全局數組 189
8.6.1 $_SERVER[ ]全局數組 189
8.6.2 $_GET[ ]和$_POST[ ]全局數組 190
8.6.3 $_COOKIE全局數組 190
8.6.4 $_ENV[ ]全局數組 191
8.6.5 $_REQUEST[ ]全局數組 191
8.6.6 $_SESSION[ ]全局數組 191
8.6.7 $_FILES[ ]全局數組 191
8.6.8 情景套用——$_FILES[ ]全局數組在檔案上傳中的套用 191
8.7 實戰練習 193
8.7.1 生成線上考試題 193
8.7.2 通過獲取客戶端IP位址限制投票次數 193
8.8 本章小結 195
第9章 日期與時間 196
9.1 PHP的時間觀念 197
9.1.1 在PHP.INI檔案中設定時區 197
9.1.2 通過date_default_timezone_set函式設定時區 197
9.2 UNIX時間戳 198
9.2.1 獲取任意日期、時間的時間戳 198
9.2.2 獲取當前時間戳 199
9.2.3 日期、時間轉換為UNIX時間戳 199
9.3 日期和時間處理 201
9.3.1 格式化日期和時間 201
9.3.2 獲取日期和時間信息 202
9.3.3 檢驗日期和時間的有效性 203
9.4 情景套用 204
9.4.1 獲取系統當前時間和時間戳 204
9.4.2 比較兩個時間的大小 204
9.4.3 倒計時 205
9.5 實戰練習 205
9.5.1 計算程式的運行時間 205
9.5.2 網頁鬧鐘 206
9.6 本章小結 207
第二篇 核心篇
第10章 檔案和目錄處理技術 210
10.1 基本的檔案處理技術 211
10.1.1 打開一個檔案 211
10.1.2 讀取檔案內容 214
10.1.3 向檔案中寫入數據 218
10.1.4 關閉檔案指針 220
10.2 目錄操作技術 220
10.2.1 打開指定目錄 220
10.2.2 讀取目錄結構 221
10.2.3 關閉目錄指針 222
10.3 檔案的上傳技術 223
10.3.1 開啟檔案上傳功能 223
10.3.2 全局變數$_FILES套用 224
10.3.3 將上傳檔案移動到指定目錄 225
10.3.4 檔案下載技術 226
10.4 情景套用 227
10.4.1 通過文本檔案統計網站訪問量 227
10.4.2 規範化的檔案上傳 229
10.5 實戰練習 231
10.5.1 從文本檔案中讀取註冊服務條款 231
10.5.2 規範化的多檔案上傳 232
10.6 本章小結 233
第11章 圖形圖像處理技術 234
11.1 了解GD2函式館 235
11.2 設定GD2函式館 235
11.3 學習常用的圖像處理技術 235
11.3.1 創建畫布 236
11.3.2 顏色處理 237
11.3.3 繪製文字 237
11.3.4 輸出圖像 239
11.3.5 銷毀圖像 240
11.3.6 情景套用一——在照片上書寫文字 240
11.3.7 情景套用二——GD2函式生成圖像驗證碼 241
11.4 運用Jpgraph類庫繪製圖像 242
11.4.1 Jpgraph類庫簡介 242
11.4.2 Jpgraph的安裝 242
11.4.3 情景套用一——柱狀圖展示2010年第一季度編程詞典銷量 243
11.4.4 情景套用二——折線圖分析2010年公司銷售額 245
11.4.5 情景套用三——多餅形圖分析2010年圖書銷量 246
11.5 實戰練習 248
11.5.1 GD2函式生成帶有干擾線的圖像驗證碼 248
11.5.2 Jpgraph創建折線圖分析圖書銷售走勢 249
11.5.3 Jpgraph創建3D餅形圖展示部門業績比較 250
11.6 本章小結 251
第12章 Cookie和會話控制 252
12.1 會話的操作 253
12.1.1 創建會話 253
12.1.2 配置PHP的會話 255
12.2 會話的高級套用 259
12.2.1 SESSION臨時檔案 259
12.2.2 SESSION快取 259
12.2.3 SESSION資料庫存儲 261
12.3 Cookie的操作 263
12.3.1 設定Cookie 264
12.3.2 訪問Cookie 265
12.3.3 刪除Cookie 266
12.4 情景套用 267
12.4.1 登錄驗證 267
12.4.2 Cookie自動登錄 269
12.5 實戰練習 270
12.5.1 防止頁面刷新 270
12.5.2 控制客戶端Cookie 271
12.6 本章小結 272
第13章 面向對象 273
13.1 一切皆是對象 274
13.1.1 什麼是類 274
13.1.2 對象的由來 274
13.1.3 面向對象的特點 275
13.2 類的聲明 275
13.2.1 類的定義 275
13.2.2 成員屬性 276
13.2.3 成員方法 277
13.3 類的實例化 277
13.3.1 創建對象 278
13.3.2 訪問類中成員 278
13.3.3 特殊的訪問方法——“$this”和“::” 279
13.3.4 構造方法和析構方法 280
13.4 面向對象的封裝特性 281
13.4.1 public(公共成員) 282
13.4.2 private(私有成員) 282
13.4.3 protected(保護成員) 283
13.5 面向對象的繼承特性 283
13.5.1 類的繼承——extends關鍵字 283
13.5.2 類的繼承——parent::關鍵字 284
13.5.3 覆蓋父類方法 285
13.6 抽象類和接口 286
13.6.1 抽象類 286
13.6.2 接口 287
13.7 面向對象的多態性 289
13.7.1 通過繼承實現多態 289
13.7.2 通過接口實現多態 290
13.8 面向對象的關鍵字 290
13.8.1 final關鍵字 291
13.8.2 static關鍵字——聲明靜態類成員 291
13.8.3 clone關鍵字——克隆對象 292
13.8.4 對象比較 293
13.8.5 instanceof關鍵字——對象類型檢測 293
13.9 面向對象的魔術方法 293
13.9.1 _set()和_get()方法 294
13.9.2 _isset()和_unset()方法 294
13.9.3 _call()方法 294
12.9.4 _toString()方法 295
13.9.5 _autoload()方法 295
13.9.6 情景套用一——封裝一個資料庫連線類 296
13.9.7 情景套用二——封裝一個資料庫操作類 297
13.10 實戰練習 298
13.10.1 分頁類 299
13.10.2 萬用表格 300
13.11 本章小結 301
第14章 MySQL資料庫設計 302
14.1 MySQL概述 303
14.1.1 MySQL的特點 303
14.1.2 SQL和MySQL 303
14.2 MySQL伺服器的啟動和關閉 304
14.2.1 啟動MySQL伺服器 304
14.2.2 連線MySQL伺服器 305
14.2.3 關閉MySQL伺服器 305
14.3 操作MySQL資料庫 306
14.3.1 創建新資料庫 306
14.3.2 選擇指定資料庫 306
14.3.3 刪除指定資料庫 306
14.4 操作MySQL數據表 307
14.4.1 創建一個表 307
14.4.2 查看數據表結構 308
14.4.3 修改數據表結構 309
14.4.4 重命名數據表 310
14.4.5 刪除指定數據表 310
14.5 操作MySQL數據 311
14.5.1 向數據表中添加數據(INSERT) 311
14.5.2 更新數據表中數據(UPDATE) 312
14.5.3 刪除數據表中數據(DELETE) 312
14.5.4 查詢數據表中數據 313
14.5.5 情景套用一——數據排序 316
14.5.6 情景套用二——limit控制輸出數據的開始位置和記錄數 316
14.6 MySQL數據類型 316
14.6.1 數字類型 317
14.6.2 字元串類型 317
14.6.3 日期和時間數據類型 319
14.7 用phpMyAdmin管理MySQL資料庫 319
14.7.1 管理資料庫 319
14.7.2 管理數據表 320
14.7.3 管理數據記錄 322
14.7.4 導入/導出數據 324
14.8 實戰練習 325
14.8.1 批量添加記錄(LOAD DATA和MYSQLIMPORT) 325
14.8.2 在phpMyAdmin中重置MySQL伺服器登錄密碼 326
14.9 本章小結 326
第15章 資料庫編程技術 327
15.1 PHP操作MySQL資料庫的步驟 328
15.2 PHP操作MySQL資料庫的方法 329
15.2.1 mysql_connect()函式連線MySQL伺服器 329
15.2.2 mysql_select_db()函式選擇MySQL資料庫 330
15.2.3 mysql_query()函式執行SQL語句 330
15.2.4 mysql_fetch_array()函式將結果集返回到數組中 331
15.2.5 mysql_fetch_row()函式從結果集中獲取一行作為枚舉數組 333
15.2.6 mysql_num_rows()函式獲取查詢結果集中的記錄數 333
15.3 管理MySQL資料庫中的數據 334
15.3.1 向資料庫中添加數據 334
15.3.2 編輯資料庫數據 335
15.3.3 從資料庫中刪除數據 336
15.3.4 批量數據操作 336
15.4 情景套用 337
15.4.1 通用查詢 337
15.4.2 分組統計 338
15.4.3 對查詢結果分頁顯示 339
15.4.4 站內搜尋 340
15.5 實戰練習 341
15.5.1 對查詢結果進行跳轉分頁顯示 341
15.5.2 高級查詢 341
15.6 本章小結 342
第三篇 高級篇
第16章 PDO資料庫抽象層 346
16.1 什麼是PDO 347
16.1.1 PDO概述 347
16.1.2 PDO特點 347
16.1.3 安裝PDO 347
16.2 PDO連線資料庫 348
16.2.1 PDO構造函式 348
16.2.2 情景套用一——連線MySQL資料庫 348
16.2.3 情景套用二——連線MS SQL Server資料庫 349
16.2.4 情景套用三——連線Oracle資料庫 350
16.3 PDO中執行SQL語句 350
16.3.1 exec()方法 351
16.3.2 query()方法 351
16.3.3 預處理語句——prepare()和execute() 352
16.3.4 情景套用一——通過PDO向資料庫中添加數據 353
16.3.5 情景套用二——通過PDO更新資料庫中數據 354
16.4 PDO中獲取結果集 355
16.4.1 fetch()方法 355
16.4.2 fetchAll()方法 357
16.4.3 fetchColumn()方法 358
16.5 PDO中捕獲SQL語句中的錯誤 359
16.5.1 使用默認模式——PDO::ERRMODE_SILENT 359
16.5.2 使用警告模式——PDO::ERRMODE_WARNING 360
16.5.3 使用異常模式——PDO::ERRMODE_EXCEPTION 361
16.6 PDO中錯誤處理 362
16.6.1 errorCode()方法 362
16.6.2 errorInfo()方法 363
16.7 PDO中事務處理 364
16.8 PDO中存儲過程 366
16.9 實戰練習 367
16.9.1 PDO讀取MS SQL Server資料庫中數據 367
16.9.2 PDO讀取Oracle資料庫中數據 368
16.10 本章小結 369
第17章 ADODB資料庫抽象層 370
17.1 ADODB概述 371
17.1.1 ADODB的優點與缺點 371
17.1.2 ADODB的安裝與操作流程 371
17.2 連線資料庫系統和資料庫 372
17.2.1 連線資料庫系統——ADONewConnection()函式 372
17.2.2 資料庫持久化連線——PConnect()函式 372
17.2.3 資料庫非持久化連線——Connect()函式 372
17.2.4 情景套用一——ADODB連線MySQL資料庫 373
17.2.5 情景套用二——ADODB連線Access資料庫 374
17.2.6 情景套用三——ADODB連線MS SQL Server資料庫 374
17.2.7 情景套用四——ADODB連線Oracle資料庫 375
17.3 通過公共變數控制數據的存取方式 376
17.4 ADODB執行SQL語句 377
17.4.1 執行SQL語句——execute()函式 377
17.4.2 控制SELECT查詢語句的起始位置——SelectLimit()函式 378
17.4.3 添加、更新數據——GetInsertSQL()、GetUpdateSQL()函式 379
17.4.4 操作SQL語句的其他方法 380
17.5 ADODB控制結果集 380
17.5.1 控制指針的方法 381
17.5.2 控制結果集內容的方法 382
17.5.3 日期格式和數據類型的轉換 383
17.6 ADODB中的分頁 384
17.6.1 ADODB分頁函式 384
17.6.2 一個小巧的分頁函式——ADODB_Pager()函式 385
17.7 ADODB中的錯誤處理 386
17.7.1 ADODB中的錯誤處理函式 386
17.7.2 ADODB中自定義的錯誤處理機制 387
17.7.3 情景套用——通過日誌檔案存儲錯誤信息 388
17.8 ADODB中的事務處理 389
17.9 實戰練習 390
17.9.1 封裝ADODB連線資料庫類 390
17.9.2 封裝ADODB運算元據庫類 391
17.9.3 封裝ADODB分頁類 392
17.9.4 通過事務處理機制保證數據轉換的順利完成 393
17.10 本章小結 395
第18章 PHP的字元編碼 396
18.1 了解網頁字元編碼 397
18.1.1 ASCII 字元集 397
18.1.2 ISO 8859 字元集 397
18.1.3 GB2312與GBK編碼 398
18.1.4 Unicode字元集 398
18.1.5 UTF-8編碼 398
18.2 PHP網頁的字元編碼 399
18.2.1 設定編碼格式 399
18.2.2 轉換編碼格式 400
18.2.3 檢測字元串的編碼 402
18.3 PHP開發中的亂碼問題 403
18.3.1 解決頁面中的亂碼問題 403
18.3.2 資料庫中的字元集編碼問題 405
18.3.3 避免截取中文字元串時出現亂碼 406
18.4 PHP區域化設定 407
18.4.1 PHP網頁的區域化 407
18.4.2 使用setlocale()函式設定區域化 408
18.5 實戰練習 409
18.5.1 避免截取超長文本時出現亂碼 409
18.5.2 了解PHP編碼規則 410
18.5.3 了解PHP編碼風格 410
18.6 本章小結 412
第19章 程式調試與錯誤處理 413
19.1 基本調試策略 414
19.2 常見錯誤分析 414
19.2.1 語法錯誤 414
19.2.2 定義錯誤 417
19.2.3 邏輯錯誤 418
19.2.4 運行錯誤 419
19.2.5 環境錯誤 421
19.3 PHP.INI中的錯誤處理機制 422
19.3.1 控制錯誤顯示及顯示方式 423
19.3.2 控制錯誤的級別 423
19.4 程式調試方法 424
19.4.1 套用DIE語句調試 424
19.4.2 套用mysql_error()語句輸出錯誤信息 425
19.4.3 套用try{}catch{}M語句拋出並捕獲異常 425
19.5 錯誤處理技巧 427
19.5.1 隱藏錯誤 427
19.5.2 自定義錯誤頁面 427
19.5.3 延長伺服器執行時間——處理逾時錯誤 428
19.6 情景套用 429
19.6.1 如何分析、解決PHP與MySQL連線錯誤 429
19.6.2 解決資料庫亂碼問題 431
19.7 實戰練習 432
19.7.1 封裝屬於自己的異常處理類 432
19.7.2 使用錯誤處理器記錄日誌 433
19.8 本章小結 434
第20章 Smarty模板技術 435
20.1 走進Smarty模板引擎 436
20.1.1 Smarty模板引擎下載 437
20.1.2 Smarty模板引擎安裝 437
20.1.3 Smarty模板引擎配置 437
20.1.4 情景套用一——走進Smarty模板引擎 439
20.1.5 情景套用二——封裝Smarty模板的配置方法 440
20.2 Smarty模板設計——靜態頁處理 442
20.2.1 基本語法(注釋、函式和屬性) 442
20.2.2 Smarty模板設計變數 443
20.2.3 變數調節器 444
20.2.4 情景套用一——Smarty模板中日期、時間的格式化輸出 445
20.2.5 情景套用二——通過組合修改器分隔多個變數調節器 445
20.2.6 內建函式(動態檔案、模板檔案的包含和流程控制語句) 446
20.2.7 情景套用三——Smarty模板創建網頁框架 448
20.2.8 情景套用四——section語句循環輸出資料庫中的數據 450
20.2.9 自定義函式 451
20.2.10 配置檔案 454
20.3 Smarty程式設計——動態檔案操作 455
20.3.1 SMARTY_PATH常量 455
20.3.2 Smarty程式設計變數 455
20.3.3 Smarty方法 456
20.3.4 Smarty快取 456
20.3.5 情景套用——開啟網站註冊頁面的快取 458
20.4 實戰練習 460
20.4.1 Smarty+ADODB完成數據的分頁輸出 460
20.4.2 Smarty中通過truncate方法截取字元串 461
20.4.3 用Register_Function方法註冊模板函式 462
20.4.4 Smarty模板中的關鍵字描紅 464
20.5 本章小結 464
第四篇 實戰篇
第21章 企業網站開發模板 466
21.1 明日企業網概述 467
21.2 開發背景 467
21.3 需求分析 467
21.4 功能結構 468
21.5 資料庫設計 469
21.5.1 資料庫概念設計 469
21.5.2 創建資料庫及數據表 470
21.6 技術攻關 471
21.6.1 Smarty模板 471
21.6.2 最簡單的網頁框架 473
21.6.3 ADODB類庫 473
21.6.4 封裝分頁類 474
21.7 首頁設計 475
21.7.1 首頁概述 475
21.7.2 首頁技術分析 476
21.7.3 首頁的實現過程 476
21.8 產品展示設計 478
21.8.1 產品展示概述 478
21.8.2 產品展示技術分析 478
21.8.3 產品展示實現過程 479
21.9 後台管理系統設計 480
21.9.1 後台管理系統概述 481
21.9.2 後台管理系統技術分析 481
21.9.3 後台管理系統實現過程 482
21.10 程式調試與錯誤處理 486
21.10.1 SQL語句的返回機制 486
21.10.2 錯誤處理 487
21.11 開發總結 488
附錄 專業術語表 489