在好例子网,分享、交流、成长!
您当前所在位置:首页PHP 开发实例PHP语言基础 → Beginning PHP and MySQL 5 From Novice to Professional,

Beginning PHP and MySQL 5 From Novice to Professional,

PHP语言基础

下载此实例
  • 开发语言:PHP
  • 实例大小:17.59M
  • 下载次数:8
  • 浏览次数:49
  • 发布时间:2022-08-08
  • 实例类别:PHP语言基础
  • 发 布 人:sumikoa
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: MySql php PROF sql php

实例介绍

【实例简介】Beginning PHP and MySQL 5 From Novice to Professional,

Beginning PHP and MySQL: From Novice to Professional, Fourth Edition is a major update of W. Jason Gilmore’s authoritative book on PHP and MySQL. The fourth edition includes complete coverage of PHP 5.3 features, including namespacing, an update of AMP stack installation and configuration, updates to Zend Framework, coverage of MySQL Workbench, and much more. You’ll not only receive extensive introductions to the core features of PHP, MySQL, and related tools, but you’ll also learn how to effectively integrate them in order to build robust data-driven applications. Gilmore has seven years of experience working with these technologies, and he has packed this book with practical examples and insight into the real-world challenges faced by developers. Accordingly, you will repeatedly return to this book as both a valuable instructional tool and reference guide. What you’ll learn How to install and configure Apache, PHP 5.3, and MySQL PHP and object-oriented programming basics New PHP 5.3 features and how to use them How to move beyond basic PHP, including using the Zend Framework How to use MySQL to securely store your website's data How to use MySQL Workbench to manage your database Who this book is for Developers who want to harness PHP and MySQL to create powerful web applications Table of Contents Introducing PHP Configuring Your Environment PHP Basics Functions Arrays Object-Oriented PHP Advanced OOP Features Error and Exception Handling Strings and Regular Expressions Working with the File and Operating System PEAR Date and Time Forms Authenticating Your Users Handling File Uploads Networking PHP and LDAP Session Handlers Templating with Smarty Web Services Secure PHP Programming SQLite Building Web Sites for the World MVC and the Zend Framework Introducing MySQL Installing and Configuring MySQL The Many MySQL Clients MySQL Storage Engines and Datatypes Securing MySQL Using PHP with MySQL Introducing PDO Stored Routines MySQL Triggers MySQL Views Practical Database Queries Indexes and Searching Transactions Importing and Exporting Data

【实例截图】

【核心代码】


Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
■CHAPTER 1
An Introduction to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
■CHAPTER 2
Installing and Configuring Apache and PHP . . . . . . . . . . . . . . . . . . . . . 9
■CHAPTER 3
PHP Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
■CHAPTER 4
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
■CHAPTER 5
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
■CHAPTER 6
Object-Oriented PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
■CHAPTER 7
Advanced OOP Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
■CHAPTER 8
Error and Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
■CHAPTER 9
Strings and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
■CHAPTER 10
Working with the File and Operating System . . . . . . . . . . . . . . . . . 229
■CHAPTER 11
PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
■CHAPTER 12
Date and Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
■CHAPTER 13
Forms and Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
■CHAPTER 14
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
■CHAPTER 15
Handling File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
■CHAPTER 16
Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
■CHAPTER 17
PHP and LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
■CHAPTER 18
Session Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
■CHAPTER 19
Templating with Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
■CHAPTER 20
Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
■CHAPTER 21
Secure PHP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
■CHAPTER 22
SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
■CHAPTER 23
Introducing PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Gilmore_552-1Front.fm Page v Wednesday, December 21, 2005 3:05 PMvi
■CONTENTS AT A GLANCE
■CHAPTER 24
Introducing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
■CHAPTER 25
Installing and Configuring MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
■CHAPTER 26
The Many MySQL Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
■CHAPTER 27
MySQL Storage Engines and Datatypes . . . . . . . . . . . . . . . . . . . . . . 631
■CHAPTER 28
Securing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
■CHAPTER 29
PHP’s MySQL Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
■CHAPTER 30
PHP’s mysqli Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
■CHAPTER 31
Stored Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
■CHAPTER 32
MySQL Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
■CHAPTER 33
Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
■CHAPTER 34
Practical Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
■CHAPTER 35
Indexes and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
■CHAPTER 36
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
■CHAPTER 37
Importing and Exporting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
Gilmore_552-1Front.fm Page vi Wednesday, December 21, 2005 3:05 PMvii
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
■CHAPTER 1
An Introduction to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
PHP 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
General Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Practicality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Power. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Possibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Price . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
■CHAPTER 2
Installing and Configuring Apache and PHP . . . . . . . . . . . . . . 9
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Obtaining the Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The Installation Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Testing Your Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Customizing the Unix Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Customizing the Windows Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Common Pitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Viewing and Downloading the Documentation . . . . . . . . . . . . . . . . . 19
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Managing PHP’s Configuration Directives . . . . . . . . . . . . . . . . . . . . . 20
PHP’s Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Contents
Gilmore_552-1Front.fm Page vii Wednesday, December 21, 2005 3:05 PMviii
■CONTENTS
■CHAPTER 3
PHP Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Escaping to PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Default Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Short-Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
ASP-Style. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Embedding Multiple Code Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Single-line C Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Shell Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Multiple-Line C Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
print() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
echo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
printf(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
sprintf(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Scalar Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Compound Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Special Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Type Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Type Juggling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Type-Related Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Type Identifier Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Variable Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Variable Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
PHP’s Superglobal Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Variable Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Operands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
String Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Double Quotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Single Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Heredoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Gilmore_552-1Front.fm Page viii Wednesday, December 21, 2005 3:05 PM■CONTENTS
ix
Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Execution Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Looping Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
File Inclusion Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
■CHAPTER 4
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Invoking a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Creating a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Passing Arguments by Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Passing Arguments by Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Default Argument Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Optional Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Returning Values from a Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Nesting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Recursive Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Variable Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Function Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
■CHAPTER 5
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
What Is an Array? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Outputting Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Creating an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Testing for an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Adding and Removing Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Locating Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Traversing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Determining Array Size and Uniqueness . . . . . . . . . . . . . . . . . . . . . . . . . 116
Sorting Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Merging, Slicing, Splicing, and Dissecting Arrays . . . . . . . . . . . . . . . . . . 124
Other Useful Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Gilmore_552-1Front.fm Page ix Wednesday, December 21, 2005 3:05 PMx
■CONTENTS
■CHAPTER 6
Object-Oriented PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
The Benefits of OOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Key OOP Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
__set() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Type Hinting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Constructors and Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Static Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
The instanceof Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Helper Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Autoloading Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
■CHAPTER 7
Advanced OOP Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Advanced OOP Features Not Supported by PHP . . . . . . . . . . . . . . . . . . . 157
Object Cloning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Cloning Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
The __clone() Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Class Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Inheritance and Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Implementing a Single Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Implementing Multiple Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Gilmore_552-1Front.fm Page x Wednesday, December 21, 2005 3:05 PM■CONTENTS
xi
Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Writing the ReflectionClass Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Writing the ReflectionMethod Class . . . . . . . . . . . . . . . . . . . . . . . . . 172
Writing the ReflectionParameter Class. . . . . . . . . . . . . . . . . . . . . . . 174
Writing the ReflectionProperty Class . . . . . . . . . . . . . . . . . . . . . . . . 175
Other Reflection Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
■CHAPTER 8
Error and Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Error Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Why Exception Handling Is Handy. . . . . . . . . . . . . . . . . . . . . . . . . . . 183
PHP’s Exception-Handling Implementation . . . . . . . . . . . . . . . . . . . 185
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
■CHAPTER 9
Strings and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . 191
Complex (Curly) Offset Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Regular Expression Syntax (POSIX). . . . . . . . . . . . . . . . . . . . . . . . . . 193
PHP’s Regular Expression Functions (POSIX Extended) . . . . . . . . . 195
Regular Expression Syntax (Perl Style). . . . . . . . . . . . . . . . . . . . . . . 198
Other String-Specific Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Determining the Length of a String . . . . . . . . . . . . . . . . . . . . . . . . . 205
Comparing Two Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Manipulating String Case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Converting Strings to and from HTML . . . . . . . . . . . . . . . . . . . . . . . 209
Alternatives for Regular Expression Functions . . . . . . . . . . . . . . . . 214
Padding and Stripping a String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Counting Characters and Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Taking Advantage of PEAR: Validate_US . . . . . . . . . . . . . . . . . . . . . . . . . 226
Installing Validate_US. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Using Validate_US . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Gilmore_552-1Front.fm Page xi Wednesday, December 21, 2005 3:05 PMxii
■CONTENTS
■CHAPTER 10 Working with the File and Operating System . . . . . . . . . . . 229
Learning About Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Parsing Directory Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
File Types and Links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Calculating File, Directory, and Disk Sizes . . . . . . . . . . . . . . . . . . . 235
Access and Modification Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
File Ownership and Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
The Concept of a Resource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Newline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
End-of-File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Opening and Closing a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Reading from a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Moving the File Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Writing to a File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Reading Directory Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Executing Shell Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
PHP’s Built-in System Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 252
System-Level Program Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Sanitizing the Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
PHP’s Program Execution Functions. . . . . . . . . . . . . . . . . . . . . . . . . 255
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
■CHAPTER 11 PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Popular PEAR Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Converting Numeral Formats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Installing and Updating PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Installing PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
PEAR and Hosting Companies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Updating PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Using the PEAR Package Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Viewing Installed Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Learning More About an Installed Package . . . . . . . . . . . . . . . . . . . 265
Installing a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Using a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Upgrading a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Uninstalling a Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Downgrading a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Gilmore_552-1Front.fm Page xii Wednesday, December 21, 2005 3:05 PM■CONTENTS
xiii
■CHAPTER 12 Date and Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
The Unix Timestamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
PHP’s Date and Time Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Date Fu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Displaying the Localized Date and Time . . . . . . . . . . . . . . . . . . . . . 279
Displaying the Web Page’s Most Recent Modification Date . . . . . 283
Determining the Number Days in the Current Month . . . . . . . . . . . 283
Calculating the Date X Days from the Present Date . . . . . . . . . . . . 284
Creating a Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
PHP 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Date Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
The Date Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Accessors and Mutators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Manipulation Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
■CHAPTER 13 Forms and Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
PHP and Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
A Simple Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Passing Form Data to a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Working with Multivalued Form Components . . . . . . . . . . . . . . . . . 307
Generating Forms with PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Autoselecting Forms Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
PHP, Web Forms, and JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Navigational Cues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
User-Friendly URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Breadcrumb Trails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Creating Custom Error Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
■CHAPTER 14 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
HTTP Authentication Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
PHP Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Authentication Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Authentication Methodologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Gilmore_552-1Front.fm Page xiii Wednesday, December 21, 2005 3:05 PMxiv
■CONTENTS
User Login Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Password Designation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Testing Password Guessability with the CrackLib Library . . . . . . . 339
One-Time URLs and Password Recovery. . . . . . . . . . . . . . . . . . . . . 341
■CHAPTER 15 Handling File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Uploading Files via the HTTP Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Handling Uploads with PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
PHP’s File Upload/Resource Directives . . . . . . . . . . . . . . . . . . . . . . 346
The $_FILES Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
PHP’s File-Upload Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Upload Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
File-Upload Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Taking Advantage of PEAR: HTTP_Upload . . . . . . . . . . . . . . . . . . . . . . . . 355
Installing HTTP_Upload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Learning More About an Uploaded File . . . . . . . . . . . . . . . . . . . . . . 355
Moving an Uploaded File to the Final Destination . . . . . . . . . . . . . . 356
Uploading Multiple Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
■CHAPTER 16 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
DNS, Services, and Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Establishing Socket Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Configuration Directives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Sending a Plain-Text E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Sending an E-Mail with Additional Headers. . . . . . . . . . . . . . . . . . . 369
Sending an E-Mail to Multiple Recipients . . . . . . . . . . . . . . . . . . . . 369
Sending an HTML-Formatted E-Mail . . . . . . . . . . . . . . . . . . . . . . . . 370
Sending an Attachment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
IMAP, POP3, and NNTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Establishing and Closing a Connection . . . . . . . . . . . . . . . . . . . . . . 374
Learning More About Mailboxes and Mail . . . . . . . . . . . . . . . . . . . . 375
Gilmore_552-1Front.fm Page xiv Wednesday, December 21, 2005 3:05 PM■CONTENTS
xv
Retrieving Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Composing a Message. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Sending a Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Mailbox Administration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Message Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Stream Wrappers and Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Stream Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Common Networking Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Pinging a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
A Port Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Subnet Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Testing User Bandwidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
■CHAPTER 17 PHP and LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
An Introduction to LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Learning More About LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Using LDAP from PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Connecting to the LDAP Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Binding to the LDAP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Closing the LDAP Server Connection . . . . . . . . . . . . . . . . . . . . . . . . 403
Retrieving LDAP Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Working with Entry Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Counting Retrieved Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Retrieving Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Sorting and Comparing LDAP Entries . . . . . . . . . . . . . . . . . . . . . . . . 410
Working with Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Deallocating Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Inserting LDAP Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Updating LDAP Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Deleting LDAP Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Configuration Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Character Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Working with the Distinguished Name . . . . . . . . . . . . . . . . . . . . . . . 421
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Gilmore_552-1Front.fm Page xv Wednesday, December 21, 2005 3:05 PMxvi
■CONTENTS
■CHAPTER 18 Session Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
What Is Session Handling? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
URL Rewriting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
The Session-Handling Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Key Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Starting a Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Destroying a Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Retrieving and Setting the Session ID . . . . . . . . . . . . . . . . . . . . . . . 434
Creating and Deleting Session Variables . . . . . . . . . . . . . . . . . . . . . 434
Encoding and Decoding Session Data . . . . . . . . . . . . . . . . . . . . . . . 435
Practical Session-Handling Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Auto-Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Recently Viewed Document Index. . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Creating Custom Session Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Tying Custom Session Functions into PHP’s Logic . . . . . . . . . . . . . 442
Custom MySQL-Based Session Handlers . . . . . . . . . . . . . . . . . . . . 442
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
■CHAPTER 19 Templating with Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
What’s a Templating Engine? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Introducing Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Installing Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Using Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Smarty’s Presentational Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Variable Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Control Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Creating Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
config_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Referencing Configuration Variables . . . . . . . . . . . . . . . . . . . . . . . . 466
Using CSS in Conjunction with Smarty . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Working with the Cache Lifetime . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Eliminating Processing Overhead with is_cached() . . . . . . . . . . . . 469
Creating Multiple Caches per Template . . . . . . . . . . . . . . . . . . . . . . 470
Some Final Words About Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Gilmore_552-1Front.fm Page xvi Wednesday, December 21, 2005 3:05 PM■CONTENTS
xvii
■CHAPTER 20 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Why Web Services? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Real Simple Syndication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
RSS Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
MagpieRSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
SimpleXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
SimpleXML Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
SimpleXML Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
NuSOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
PHP 5’s SOAP Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Using a C# Client with a PHP Web Service . . . . . . . . . . . . . . . . . . . . . . . 512
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
■CHAPTER 21 Secure PHP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Configuring PHP Securely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Safe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Other Security-Related Configuration Parameters . . . . . . . . . . . . . 518
Hiding Configuration Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Hiding Apache and PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Hiding Sensitive Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Take Heed of the Document Root . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Denying Access to Certain File Extensions . . . . . . . . . . . . . . . . . . . 523
Sanitizing User Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
File Deletion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
Cross-Site Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
Sanitizing User Input: The Solution. . . . . . . . . . . . . . . . . . . . . . . . . . 526
Data Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
PHP’s Encryption Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
mhash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
MCrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
■CHAPTER 22 SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Introduction to SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Installing SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
Using the SQLite Command-Line Interface . . . . . . . . . . . . . . . . . . . 536
Gilmore_552-1Front.fm Page xvii Wednesday, December 21, 2005 3:05 PMxviii
■CONTENTS
PHP’s SQLite Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
SQLite Directives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Opening a Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
Creating a Table in Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Closing a Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Querying a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Parsing Result Sets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
Retrieving Result Set Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Manipulating the Result Set Pointer . . . . . . . . . . . . . . . . . . . . . . . . . 546
Learning More About Table Schemas . . . . . . . . . . . . . . . . . . . . . . . 548
Working with Binary Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Creating and Overriding SQLite Functions . . . . . . . . . . . . . . . . . . . . 550
Creating Aggregate Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
■CHAPTER 23 Introducing PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
Another Database Abstraction Layer? . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
Using PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Installing PDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
PDO’s Database Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Connecting to a Database Server and Selecting a Database. . . . . 559
Getting and Setting Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
Prepared Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
Retrieving Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
Setting Bound Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
■CHAPTER 24 Introducing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
What Makes MySQL So Popular? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Flexibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Power. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
Flexible Licensing Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
A (Hyper) Active User Community . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
MySQL 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
MySQL 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Gilmore_552-1Front.fm Page xviii Wednesday, December 21, 2005 3:05 PM■CONTENTS
xix
Prominent MySQL Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
craigslist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Yahoo! Finance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Wikipedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
■CHAPTER 25 Installing and Configuring MySQL . . . . . . . . . . . . . . . . . . . . . . . 581
PHP and MySQL Licensing Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582
Downloading MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Installing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
Set the MySQL Administrator Password . . . . . . . . . . . . . . . . . . . . . . . . . 591
Starting and Stopping MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Controlling the Daemon Manually. . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Starting and Stopping MySQL Automatically . . . . . . . . . . . . . . . . . . 594
Configuring and Optimizing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
mysqld_safe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Configuration and Optimization Parameters . . . . . . . . . . . . . . . . . . 597
The my.cnf File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
■CHAPTER 26 The Many MySQL Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Standard Client Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
Connection Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
General Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Key mysql Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Using mysql in Interactive Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Viewing Configuration Variables and System Status . . . . . . . . . . . 614
Using mysql in Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Useful mysql Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
mysqladmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
mysqladmin Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Gilmore_552-1Front.fm Page xix Wednesday, December 21, 2005 3:05 PMxx
■CONTENTS
The Other Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
mysqlshow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
mysqlhotcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622
mysqlimport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
myisamchk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
mysqlcheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Third-Party Client Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
MySQL Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
MySQL Query Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Navicat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
■CHAPTER 27 MySQL Storage Engines and Datatypes . . . . . . . . . . . . . . . . . 631
Storage Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
MEMORY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
BDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
FEDERATED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
ARCHIVE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
CSV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
EXAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
BLACKHOLE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Storage Engine FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Datatypes and Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Datatypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Datatype Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Working with Databases and Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Working with Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Working with Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
Altering a Table Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
The INFORMATION_SCHEMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
Gilmore_552-1Front.fm Page xx Wednesday, December 21, 2005 3:05 PM■CONTENTS
xxi
■CHAPTER 28 Securing MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
What You Should Do First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Securing the mysqld Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
The MySQL Access Privilege System . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
How the Privilege System Works . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
Where Is Access Information Stored?. . . . . . . . . . . . . . . . . . . . . . . . 665
User and Privilege Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
CREATE USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
DROP USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
RENAME USER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
The GRANT and REVOKE Commands . . . . . . . . . . . . . . . . . . . . . . . . 676
Reviewing Privileges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Limiting User Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Secure MySQL Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Grant Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
SSL Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Starting the SSL-Enabled MySQL Server . . . . . . . . . . . . . . . . . . . . . 686
Connecting Using an SSL-Enabled Client . . . . . . . . . . . . . . . . . . . . 686
Storing SSL Options in the my.cnf File. . . . . . . . . . . . . . . . . . . . . . . 686
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
■CHAPTER 29 PHP’s MySQL Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Enabling the MySQL Extension on Linux . . . . . . . . . . . . . . . . . . . . . 689
Enabling the MySQL Extension on Windows . . . . . . . . . . . . . . . . . . 690
User Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
PHP’s MySQL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Establishing and Closing a Connection . . . . . . . . . . . . . . . . . . . . . . 691
Storing Connection Information in a Separate File . . . . . . . . . . . . . 693
Securing Your Connection Information. . . . . . . . . . . . . . . . . . . . . . . 693
Choosing a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
Querying MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
Retrieving and Displaying Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Inserting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
Modifying Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
Gilmore_552-1Front.fm Page xxi Wednesday, December 21, 2005 3:05 PMxxii
■CONTENTS
Deleting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Rows Selected and Rows Affected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Retrieving Database and Table Information . . . . . . . . . . . . . . . . . . . . . . . 706
Retrieving Field Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
Viewing Table Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
Retrieving Error Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Helper Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
■CHAPTER 30 PHP’s mysqli Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Enabling the mysqli Extension on Unix. . . . . . . . . . . . . . . . . . . . . . . 720
Enabling the mysqli Extension on Windows. . . . . . . . . . . . . . . . . . . 720
Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Using the mysqli Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Connecting to the MySQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Connection Error Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
Selecting a MySQL Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Closing a MySQL Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Query Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Recuperating Query Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
Readying the Result Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
Parsing Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Multiple Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
Prepared Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
Database Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
■CHAPTER 31 Stored Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Should You Use Stored Routines? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Stored Routine Advantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
Stored Routine Disadvantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
How MySQL Implements Stored Routines . . . . . . . . . . . . . . . . . . . . . . . . 747
Stored Routine Privilege Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
Creating a Stored Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
Declaring and Setting Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
Gilmore_552-1Front.fm Page xxii Wednesday, December 21, 2005 3:05 PM■CONTENTS
xxiii
Executing a Stored Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
Multistatement Stored Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
Calling a Routine from Within Another Routine . . . . . . . . . . . . . . . . 761
Modifying a Stored Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
Deleting a Stored Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Viewing a Routine’s Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Viewing a Routine’s Creation Syntax . . . . . . . . . . . . . . . . . . . . . . . . 763
Conditions and Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764
Integrating Routines into Web Applications . . . . . . . . . . . . . . . . . . . . . . . 764
Creating the Employee Bonus Interface . . . . . . . . . . . . . . . . . . . . . . 764
Retrieving Multiple Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
■CHAPTER 32 MySQL Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Introducing Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Why Use Triggers? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Taking Action Before an Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Taking Action After an Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Before Triggers vs. After Triggers. . . . . . . . . . . . . . . . . . . . . . . . . . . 769
MySQL’s Trigger Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Creating a Trigger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771
Viewing Existing Triggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
Modifying a Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
Deleting a Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774
Cascading Triggers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Integrating Triggers into Web Applications . . . . . . . . . . . . . . . . . . . . . . . 776
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778
■CHAPTER 33 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Introducing Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
MySQL’s View Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780
Creating and Executing Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
Viewing View Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
Modifying a View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
Deleting a View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
Updating Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
Incorporating Views into Web Applications . . . . . . . . . . . . . . . . . . . . . . . 789
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Gilmore_552-1Front.fm Page xxiii Wednesday, December 21, 2005 3:05 PMxxiv
■CONTENTS
■CHAPTER 34 Practical Database Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Creating Tabular Output with PEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Installing HTML_Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
Creating a Simple Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
Creating More Readable Row Output . . . . . . . . . . . . . . . . . . . . . . . . 797
Creating a Table from Database Data . . . . . . . . . . . . . . . . . . . . . . . 798
Generalizing the Output Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
Sorting Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
Creating Paged Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
Listing Page Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Performing Comparisons with Subqueries . . . . . . . . . . . . . . . . . . . 809
Determining Existence with Subqueries . . . . . . . . . . . . . . . . . . . . . 809
Database Maintenance with Subqueries . . . . . . . . . . . . . . . . . . . . . 811
Using Subqueries with PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
Cursor Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
Creating a Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Opening a Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Using a Cursor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Closing a Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Using Cursors with PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
■CHAPTER 35 Indexes and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Database Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
Primary Key Indexes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
Unique Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
Normal Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Full-Text Indexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
Indexing Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
Forms-Based Searches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
Performing a Simple Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
Extending Search Capabilities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Performing a Full-Text Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Gilmore_552-1Front.fm Page xxiv Wednesday, December 21, 2005 3:05 PM■CONTENTS
xxv
■CHAPTER 36 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
What’s a Transaction? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
MySQL’s Transactional Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
Table Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
InnoDB Configuration Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . 833
A Sample Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836
Executing an Example Transaction. . . . . . . . . . . . . . . . . . . . . . . . . . 837
Backing Up and Restoring InnoDB Tables . . . . . . . . . . . . . . . . . . . . 839
Usage Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Building Transactional Applications with PHP . . . . . . . . . . . . . . . . . . . . . 840
The Swap Meet Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
■CHAPTER 37 Importing and Exporting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
Sample Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845
Attaining a Happy Medium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
Exporting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
SELECT INTO OUTFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847
Importing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
Importing Data with LOAD DATA INFILE. . . . . . . . . . . . . . . . . . . . . . 850
Importing with mysqlimport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Loading Table Data with PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859


标签: MySql php PROF sql php

实例下载地址

Beginning PHP and MySQL 5 From Novice to Professional,

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警