■CONTENTS
xxi
The MySQL Access Privilege System . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
How the Privilege System Works . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
Where Is Access Information Stored?. . . . . . . . . . . . . . . . . . . . . . . . 738
User and Privilege Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Creating Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
Deleting Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
Renaming Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
The GRANT and REVOKE Commands . . . . . . . . . . . . . . . . . . . . . . . . 752
Reviewing Privileges. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
Limiting User Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
Secure MySQL Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760
Grant Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
SSL Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762
Starting the SSL-Enabled MySQL Server . . . . . . . . . . . . . . . . . . . . . 764
Connecting Using an SSL-Enabled Client . . . . . . . . . . . . . . . . . . . . 764
Storing SSL Options in the my.cnf File. . . . . . . . . . . . . . . . . . . . . . . 764
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
■CHAPTER 30 Using PHP with MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Handling Installation Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768
Enabling the mysqli Extension on Linux/Unix . . . . . . . . . . . . . . . . . 769
Enabling the mysqli Extension on Windows. . . . . . . . . . . . . . . . . . . 769
Managing User Privileges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
Working with Sample Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
Using the mysqli Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Setting Up and Tearing Down the Connection. . . . . . . . . . . . . . . . . 770
Handling Connection Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
Retrieving Error Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
Storing Connection Information in a Separate File . . . . . . . . . . . . . 774
Securing Your Connection Information. . . . . . . . . . . . . . . . . . . . . . . 775
Interacting with the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Sending a Query to the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Parsing Query Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Determining the Rows Selected and Rows Affected . . . . . . . . . . . 781
Working with Prepared Statements . . . . . . . . . . . . . . . . . . . . . . . . . 782
Executing Database Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Enabling Autocommit Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Committing a Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Rolling Back a Transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791