PHP 與 MySQL 程序設計, 5/e
內容描述
本書是全面講述PHP 與MySQL 的經典暢銷之作,不但詳細介紹了這兩種技術及其相關工具的核心特性,還講解瞭如何高效地結合這兩種技術構建出健壯的數據驅動的應用程序。書中大量實際的示例和深入的分析均來自於作者在這方面多年的專業經驗,可用於解決開發者在實際工作中所面臨的各種挑戰。第5 版涵蓋了PHP 7 的新增功能以及新版MySQL 的新特性。
目錄大綱
第 1 章 PHP 簡介 1
1.1 PHP 核心特性 1
1.1.1 實用性 1
1.1.2 能力 3
1.1.3 可能性 3
1.1.4 價格 3
1.2 PHP 現狀 4
1.3 PHP 生態系統 5
1.3.1 Drupal 5
1.3.2 WordPress 6
1.3.3 Magento 6
1.3.4 MediaWiki 6
1.3.5 SugarCRM 6
1.3.6 Zend Framework 6
1.4 小結 7
第 2 章 環境配置 8
2.1 選擇主機環境 9
2.1.1 虛擬服務器 9
2.1.2 平臺即服務(PaaS) 9
2.2 安裝先決條件 9
2.2.1 Windows 9
2.2.2 macOS 14
2.2.3 Linux 15
2.2.4 從源代碼安裝 15
2.3 配置PHP 15
2.3.1 Apache httpd.conf 和.htaccess文件 16
2.3.2 在運行腳本中配置 17
2.3.3 PHP 的配置指令 17
2.4 選擇編輯器 23
2.4.1 PHPStorm 23
2.4.2 Atom 23
2.4.3 Sublime Text 23
2.4.4 Visual Studio Code 23
2.4.5 PDT(PHP 開發工具) 23
2.4.6 Zend Studio 23
2.5 小結 24
第3 章 PHP 基礎 25
3.1 在網頁中嵌入PHP 代碼 25
3.1.1 默認語法 25
3.1.2 短標簽 26
3.1.3 嵌入多個代碼塊 26
3.2 在代碼中添加註釋 27
3.2.1 單行C++語法 27
3.2.2 多行註釋 27
3.3 向客戶端輸出數據 28
3.3.1 使用printf()語句進行復雜輸出 29
3.3.2 sprintf()語句 30
3.4 PHP 數據類型 30
3.4.1 標量數據類型 30
3.4.2 復合數據類型 31
3.4.3 數據類型轉換 32
3.4.4 數據類型的自動轉換 33
3.4.5 類型標識符函數 34
3.5 使用變量處理動態數據 34
3.5.1 變量聲明 34
3.5.2 PHP 超級全局變量 35
3.6 使用常量管理固定數據 38
3.7 使用表達式 38
3.7.1 操作數:表達式的輸入 38
3.7.2 操作符:表達式的行為 39
3.8 字符串插值 43
3.8.1 雙引號字符串 43
3.8.2 轉義序列 44
3.8.3 單引號字符串 44
3.8.4 花括號 45
3.8.5 heredoc 45
3.8.6 nowdoc 45
3.9 控制結構 45
3.9.1 條件語句 46
3.9.2 使用循環語句進行重復迭代 47
3.9.3 文件包含語句 51
3.10 小結 52
第4 章 函數 53
4.1 調用函數 53
4.2 創建函數 54
4.2.1 返回多個值 55
4.2.2 按值傳遞參數 55
4.2.3 參數默認值 56
4.2.4 使用類型聲明 57
4.2.5 遞歸函數 57
4.2.6 匿名函數 60
4.2.7 函數庫 60
4.3 小結 61
第5 章 數組 62
5.1 什麽是數組 62
5.2 創建數組 63
5.2.1 使用array()創建數組 64
5.2.2 使用list()提取數組 64
5.2.3 用預定義範圍的值填充數組 65
5.2.4 檢測數組 66
5.3 輸出數組 66
5.4 添加和刪除數組元素 67
5.4.1 在數組開頭添加一個值 68
5.4.2 在數組末尾添加一個值 68
5.4.3 在數組開頭刪除一個值 68
5.4.4 在數組末尾刪除一個值 68
5.5 數組元素定位 68
5.5.1 搜索數組 69
5.5.2 提取數組的鍵 70
5.5.3 提取數組的值 70
5.6 提取列 70
5.7 數組遍歷 71
5.7.1 提取數組當前的鍵 71
5.7.2 提取數組當前的值 71
5.7.3 移動數組指針 72
5.7.4 向函數傳遞數組值 72
5.8 確定數組大小和唯一性 73
5.8.1 確定函數大小 73
5.8.2 計算數組值的頻率 74
5.8.3 確定數組中的唯一值 74
5.9 數組排序 75
5.9.1 翻轉數組元素順序 75
5.9.2 鍵與值的互換 75
5.9.3 數組排序 76
5.10 數組的合並、切片、剪接和拆分 79
5.10.1 合並數組 79
5.10.2 遞歸追加數組 80
5.10.3 組合兩個數組 80
5.10.4 數組的切片 81
5.10.5 數組的剪接 81
5.10.6 計算數組交集 82
5.10.7 計算關聯數組的交集 83
5.10.8 計算數組的差 83
5.10.9 計算關聯數組的差 83
5.11 其他有用的數組函數 84
5.11.1 返回一組隨機的鍵 84
5.11.2 重排數組元素 84
5.12 小結 85
第6 章 面向對象的PHP 86
6.1 OOP 的優點 86
6.1.1 封裝 86
6.1.2 繼承 87
6.1.3 多態 87
6.2 OOP 核心概念 87
6.2.1 類 87
6.2.2 對象 88
6.2.3 屬性 88
6.2.4 常量 93
6.2.5 方法 93
6.3 構造函數與析構函數 96
6.3.1 構造函數 96
6.3.2 析構函數 98
6.4 靜態類成員 99
6.5 instanceof 關鍵字 99
6.6 輔助函數 100
6.6.1 確定一個類是否存在 100
6.6.2 確定對象上下文 100
6.6.3 獲取類的方法 100
6.6.4 獲取類的屬性 100
6.6.5 獲取已聲明的類 100
6.6.6 獲取對象屬性 101
6.6.7 確定對象的父類 101
6.6.8 確定對象類型 101
6.6.9 確定對象子類類型 101
6.6.10 確定方法是否存在 101
6.7 自動加載對象 101
6.8 trait 102
6.9 小結 102
第7 章 高級OOP 特性 103
7.1 PHP 不支持的高級OOP 特性 103
7.2 對象克隆 103
7.2.1 克隆示例 104
7.2.2 __clone()方法 105
7.3 繼承 106
7.3.1 類的繼承 106
7.3.2 繼承與構造函數 108
7.3.3 繼承與延遲靜態綁定 109
7.4 接口 110
7.4.1 實現單個接口 111
7.4.2 實現多個接口 112
7.4.3 確定接口是否存在 112
7.5 抽象類 112
7.6 命名空間 114
7.7 小結 116
第8 章 錯誤與異常處理 117
8.1 所有問題都是因你而生 117
8.2 配置PHP 錯誤報告 118
8.2.1 設置錯誤報告等級 118
8.2.2 在瀏覽器上顯示錯誤信息 119
8.2.3 錯誤日誌 119
8.2.4 創建和記錄自定義消息 120
8.3 異常處理 120
8.4 PHP 異常處理功能 121
8.4.1 擴展基礎異常類 121
8.4.2 默認構造函數 122
8.4.3 引入finally 代碼塊 122
8.4.4 擴展異常類 123
8.4.5 捕獲多個異常 123
8.4.6 標準PHP 類庫中的異常 125
8.5 PHP 7 中的錯誤處理 125
8.6 小結 126
第9 章 字符串與正則表達式 127
9.1 正則表達式 127
9.2 其他字符串專用函數 133
9.2.1 確定字符串的長度 134
9.2.2 比較兩個字符串 134
9.2.3 處理字符串大小寫 136
9.2.4 字符串與HTML 的轉換 137
9.3 正則表達式函數的替代方式 141
9.3.1 根據預定義字符對字符串進行分詞 141
9.3.2 根據預定義分隔符拆分字符串 142
9.3.3 將數組轉換為字符串 142
9.3.4 解析復雜字符串 143
9.3.5 找出字符串最後出現的位置 143
9.3.6 將所有字符串實例替換為另一個字符串 144
9.3.7 提取部分字符串 144
9.3.8 根據預定義偏移量返回部分字符串 145
9.3.9 確定字符串出現的頻率 145
9.3.10 將字符串的一部分替換為另一個字符串 146
9.3.11 填充和剝離字符串 146
9.3.12 字符與單詞計數 147
9.4 小結 149
第 10 章 處理文件與操作系統 150
10.1 瞭解文件與目錄 150
10.1.1 目錄分隔符 150
10.1.2 解析目錄路徑 150
10.1.3 計算文件、目錄和磁盤大小 152
10.1.4 確定訪問時間和修改時間 155
10.2 處理文件 156
10.2.1 資源的概念 156
10.2.2 換行符 156
10.2.3 文件結束標志 156
10.2.4 打開與關閉文件 157
10.2.5 從文件讀取 158
10.2.6 將字符串寫入文件 164
10.2.7 移動文件指針 164
10.2.8 讀取目錄內容 165
10.3 運行shell 命令 166
10.3.1 刪除目錄 166
10.3.2 重命名文件 167
10.3.3 觸摸文件 167
10.4 系統級程序執行 167
10.4.1 凈化輸入 167
10.4.2 PHP 程序執行函數 168
10.5 小結 170
第 11 章 第三方程序庫 171
11.1 PEAR 簡介 171
11.1.1 安裝PEAR 171
11.1.2 更新PEAR 172
11.2 使用PEAR 包管理器 172
11.2.1 安裝PEAR 包 172
11.2.2 自動安裝所有依賴 173
11.2.3 查看已經安裝的PEAR 包 173
11.3 Composer 介紹 173
11.3.1 安裝Composer 173
11.3.2 使用Composer 174
11.4 使用C 程序庫擴展PHP 175
11.5 小結 176
第 12 章 日期與時間 177
12.1 UNIX 時間戳 177
12.2 PHP 日期與時間庫 177
12.2.1 驗證日期 178
12.2.2 格式化日期和時間 178
12.2.3 將時間戳轉換為用戶友好的值 181
12.2.4 處理時間戳 181
12.3 日期處理 183
12.3.1 顯示本地日期與時間 183
12.3.2 顯示網頁最近的修改日期 185
12.3.3 確定當前月份的天數 186
12.3.4 確定任意給定月份的天數 186
12.3.5 計算當前日期X 天後的日期 186
12.4 日期和時間類 187
12.4.1 DateTime 構造函數 187
12.4.2 格式化日期 187
12.4.3 在實例化之後設定日期 188
12.4.4 在實例化之後設定時間 188
12.4.5 修改日期和時間 188
12.4.6 計算兩個日期之間的差 189
12.5 小結 189
第 13 章 表單 190
13.1 PHP 和Web 表單 190
13.2 驗證表單數據 192
13.2.1 文件刪除 192
13.2.2 跨站腳本 192
13.2.3 凈化用戶輸入 193
13.2.4 使用Filter 擴展檢驗和凈化數據 195
13.2.5 處理多值表單組件 197
13.3 小結 198
第 14 章 用戶身份驗證 199
14.1 HTTP 身份驗證的概念 199
14.2 使用PHP 進行用戶身份驗證 200
14.2.1 PHP 身份驗證變量 201
14.2.2 有用的函數 201
14.3 PHP 身份驗證方法 202
14.3.1 硬編碼身份驗證 202
14.3.2 基於文件的身份驗證 202
14.3.3 基於數據庫的身份驗證 204
14.4 用戶登錄管理 205
14.4.1 密碼散列 205
14.4.2 一次性URL 和密碼找回 206
14.5 使用OAuth 2.0 208
14.6 小結 209
第 15 章 處理文件上傳 210
15.1 通過HTTP 上傳文件 210
15.2 使用PHP 上傳文件 211
15.2.1 PHP 文件上傳及資源指令 211
15.2.2 $_FILES 數組 212
15.2.3 PHP 文件上傳函數 212
15.2.4 上傳中的錯誤消息 213
15.2.5 一個簡單的例子 214
15.3 小結 215
第 16 章 網絡 216
16.1 DNS、服務與服務器 216
16.1.1 DNS 216
16.1.2 服務 220
16.1.3 建立socket 連接 221
16.2 郵件 223
16.2.1 配置指令 223
16.2.2 使用PHP 腳本發送電子郵件 224
16.3 常見網絡任務 226
16.3.1 ping 一臺服務器 227
16.3.2 創建一個埠掃描程序 227
16.3.3 創建一個子網轉換程序 228
16.4 小結 229
第 17 章 會話處理 230
17.1 什麽是會話處理 230
17.2 配置指令 230
17.2.1 管理會話存儲介質 231
17.2.2 設置會話文件路徑 231
17.2.3 自動開啟會話 231
17.2.4 設置會話名稱 231
17.2.5 選擇cookie 或URL 重寫 232
17.2.6 設置會話cookie 的生命周期 232
17.2.7 設置會話cookie 的有效URL路徑 232
17.2.8 設置緩存 233
17.3 使用會話 234
17.3.1 開始一個會話 234
17.3.2 銷毀一個會話 234
17.3.3 設置和提取會話ID 234
17.3.4 創建和刪除會話變量 235
17.3.5 會話數據的編碼和解碼 236
17.4 會話處理實例 237
17.4.1 返回用戶的自動登錄 237
17.4.2 生成近期查看的文檔索引 239
17.5 創建定製的會話處理程序 240
17.5.1 將定製會話函數嵌入PHP 邏輯 241
17.5.2 使用基於MySQL 的定製會話處理程序 241
17.6 小結 243
第 18 章 Web 服務 244
18.1 為什麽要使用Web 服務 244
18.2 從API 開始 244
18.3 API 安全性 248
18.4 創建API 249
18.5 小結 253
第 19 章 PHP 安全編程 254
19.1 PHP 安全配置 254
19.2 隱藏配置的詳細信息 256
19.2.1 隱藏Apache 256
19.2.2 隱藏PHP 257
19.3 隱藏敏感信息 257
19.3.1 隱藏文檔根目錄 258
19.3.2 拒絕訪問帶有某種擴展名的文件 258
19.4 數據加密 258
19.4.1 PHP 加密函數 258
19.4.2 使用OpenSSL 加密數據 261
19.5 小結 263
第 20 章 PHP 與jQuery 的集成 264
20.1 Ajax 簡介 264
20.2 jQuery 簡介 265
20.2.1 安裝jQuery 265
20.2.2 一個簡單的例子 265
20.2.3 對事件做出響應 266
20.2.4 jQuery 和DOM 267
20.3 創建用戶名存在性檢驗器 269
20.4 小結 272
第 21 章 MVC 與框架 273
21.1 MVC 簡介 273
21.2 PHP 框架解決方案 274
21.2.1 CakePHP 框架 275
21.2.2 Symfony 框架 275
21.2.3 Zend 框架 275
21.2.4 Phalcon 框架 275
21.2.5 Laravel 框架 276
21.2.6 PHP 框架協作組織(PHP-FIG) 280
21.2.7 PSR-1 和PSR-2 編碼規範 280
21.2.8 PSR-4 自動加載 281
21.3 小結 281
第 22 章 MySQL 簡介 282
22.1 MySQL 為何如此流行 282
22.1.1 靈活性 282
22.1.2 能力 283
22.1.3 靈活的許可證選項 284
22.2 著名的MySQL 用戶 284
22.2.1 Craigslist 284
22.2.2 Twitter 284
22.2.3 GitHub 284
22.2.4 其他著名用戶 284
22.3 MariaDB:MySQL 的一種替代方案 285
22.4 小結 285
第 23 章 安裝與配置MySQL 286
23.1 下載MySQL 286
23.2 安裝MySQL 286
23.2.1 在Linux 上安裝MySQL 287
23.2.2 在Windows 上安裝與配置MySQL 289
23.3 啟動與停止MySQL 290
23.4 配置與優化MySQL 291
23.4.1 mysqld_safe 包裝器 291
23.4.2 MySQL 配置與優化參數 291
23.4.3 my.cnf 文件 294
23.5 配置PHP 與MySQL 一起工作 296
23.5.1 在Linux 上重新配置PHP 296
23.5.2 在Windows 上重新配置PHP 296
23.6 小結 296
第 24 章 MySQL 客戶端程序 297
24.1 命令行工具簡介 297
24.1.1 mysql 客戶端程序 297
24.1.2 mysqladmin 客戶端程序 304
24.1.3 其他有用的客戶端程序 305
24.2 有用的GUI 客戶端程序 307
24.3 phpMyAdmin 307
24.4 小結 308
第 25 章 MySQL 存儲引擎和數據類型 309
25.1 存儲引擎 309
25.1.1 InnoDB 310
25.1.2 MyISAM 310
25.1.3 MEMORY 311
25.1.4 MERGE 312
25.1.5 FEDERATED 312
25.1.6 ARCHIVE 313
25.1.7 CSV 313
25.1.8 EXAMPLE 313
25.1.9 BLACKHOLE 314
25.1.10 存儲引擎FAQ 314
25.2 數據類型和屬性 315
25.2.1 數據類型 315
25.2.2 數據類型屬性 319
25.3 處理數據庫和表 321
25.3.1 處理數據庫 321
25.3.2 處理數據表 322
25.3.3 修改表結構 324
25.3.4 INFORMATION_SCHEMA 325
25.4 小結 327
第 26 章 MySQL 安全性 328
26.1 首先要做的事情 328
26.2 mysqld 守護進程的安全性 329
26.3 MySQL 訪問權限系統 330
26.3.1 權限系統的工作原理 330
26.3.2 訪問控制信息保存的位置 331
26.4 用戶與權限管理 334
26.4.1 創建用戶 334
26.4.2 刪除用戶 335
26.4.3 重命名用戶 335
26.4.4 grant 和revoke 命令 335
26.4.5 查看權限 339
26.5 限制用戶資源 339
26.6 安全的MySQL 連接 340
26.6.1 授權選項 340
26.6.2 SSL 選項 341
26.6.3 啟動MySQL 服務器並啟用SSL 342
26.6.4 啟用客戶端SSL 連接 342
26.6.5 保存SSL 選項到my.cnf 文件 342
26.7 小結 342
第 27 章 PHP 與MySQL 343
27.1 安裝的前提條件 344
27.1.1 在Linux/UNIX 上啟用mysqli 344
27.1.2 在Windows 上啟用mysqli 344
27.1.3 使用MySQL Native Driver 344
27.1.4 管理用戶權限 344
27.1.5 樣本數據 345
27.2 使用mysqli 擴展 345
27.2.1 建立與斷開連接 345
27.2.2 處理連接錯誤 346
27.2.3 提取錯誤信息 346
27.2.4 保存連接信息到單獨的文件中 347
27.2.5 保證連接信息的安全性 348
27.3 與數據庫交互 348
27.3.1 發送查詢到數據庫 348
27.3.2 解析查詢結果 350
27.3.3 確定選取和影響的行 351
27.3.4 使用預處理語句 352
27.4 執行數據庫事務 356
27.4.1 開啟自動提交模式 356
27.4.2 提交事務 356
27.4.3 回滾事務 356
27.5 小結 357
第 28 章 PDO 介紹 358
28.1 另一種數據庫抽象層嗎 358
28.2 使用PDO 359
28.2.1 安裝PDO 360
28.2.2 連接到數據庫服務器並選擇數據庫 360
28.2.3 處理錯誤 362
28.2.4 獲取和設置屬性 363
28.2.5 執行查詢 364
28.2.6 預處理語句介紹 365
28.2.7 提取數據 368
28.2.8 設置綁定列 370
28.2.9 處理事務 371
28.3 小結 372
第 29 章 存儲例程 373
29.1 你應該使用存儲例程嗎 373
29.1.1 存儲例程的優點 373
29.1.2 存儲例程的缺點 373
29.2 MySQL 如何實現存儲例程 374
29.2.1 創建一個存儲例程 374
29.2.2 聲明和設置變量 376
29.2.3 執行存儲例程 377
29.2.4 創建並使用多語句存儲例程 377
29.2.5 在一個存儲例程中調用另一個存儲例程 383
29.2.6 修改存儲例程 384
29.2.7 刪除存儲例程 384
29.2.8 查看存儲例程的狀態 384
29.2.9 查看存儲例程的創建語法 385
29.2.10 條件處理 386
29.3 在Web 應用中集成存儲例程 386
29.3.1 創建雇員獎金接口 386
29.3.2 提取多個行 387
29.4 小結 388
第30 章 MySQL 觸發器 389
30.1 觸發器介紹 389
30.1.1 為什麽使用觸發器 389
30.1.2 在事件之前採取行動 390
30.1.3 在事件之後採取行動 390
30.1.4 before 觸發器與after 觸發器 391
30.2 MySQL 觸發器支持 391
30.2.1 創建觸發器 391
30.2.2 查看已有的觸發器 392
30.2.3 修改觸發器 394
30.2.4 刪除觸發器 394
30.3 集成觸發器到Web 應用 395
30.4 小結 396
第31 章 MySQL 視圖 397
31.1 視圖介紹 397
31.2 MySQL 對視圖的支持 398
31.2.1 創建並運行視圖 398
31.2.2 查看視圖信息 402
31.2.3 修改視圖 404
31.2.4 刪除視圖 404
31.2.5 更新視圖 404
31.3 集成視圖到Web 應用 405
31.4 小結 406
第32 章 實用數據庫查詢 407
32.1 樣本數據 407
32.2 創建表格化輸出 407
32.2.1 安裝HTML_Table 408
32.2.2 創建簡單表格 408
32.2.3 創建可讀性更好的行輸出 409
32.2.4 根據數據庫數據創建表格 410
32.3 輸出排序 411
32.4 創建分頁輸出 412
32.5 列出頁碼 414
32.6 使用子查詢查詢多個表 415
32.6.1 使用子查詢進行比較 416
32.6.2 使用子查詢確定存在性 416
32.6.3 使用子查詢進行數據庫維護 417
32.6.4 在PHP 中使用子查詢 417
32.7 使用光標迭代結果集合 418
32.7.1 光標的基礎知識 418
32.7.2 創建光標 418
32.7.3 打開光標 418
32.7.4 使用光標 419
32.7.5 關閉光標 419
32.7.6 在PHP 中使用光標 420
32.8 小結 420
第33 章 索引與搜索 421
33.1 數據庫索引 421
33.1.1 主鍵索引 421
33.1.2 唯一索引 422
33.1.3 普通索引 423
33.1.4 全文索引 424
33.1.5 索引最佳實踐 427
33.2 基於表單的搜索 427
33.2.1 執行簡單搜索 428
33.2.2 擴展搜索功能 429
33.2.3 執行全文搜索 430
33.3 小結 431
第34 章 事務 432
34.1 什麽是事務 432
34.2 MySQL 事務功能 432
34.2.1 系統要求 432
34.2.2 表格創建 433
34.3 一個示例項目 433
34.3.1 創建表格並添加樣本數據 434
34.3.2 執行示例事務 434
34.3.3 使用建議 436
34.4 使用PHP 創建事務型應用 436
34.5 小結 437
第35 章 導入與導出數據 438
35.1 樣本表格 438
35.2 使用數據分隔 438
35.3 導入數據 439
35.3.1 使用LOAD DATA INFILE 導入數據 439
35.3.2 使用mysqlimport 導入數據 441
35.3.3 使用PHP 加載表數據 443
35.4 導出數據 444
35.5 小結 446
作者介紹
弗兰克·M.克罗曼(Frank M. Kromann)
Amazon软件开发经理,Web by Pixel公司联合创始人兼CEO,有20余年开发和管理经验的PHP专家,在使用软件和技术解决商业问题方面有30余年经验。在杂志上发表过多篇PHP文章,另合著有《PHP 5范例代码查询辞典》。