PHP is a server-side, HTML-embedded scripting language that may be used to create dynamic Web pages. It is available for most operating systems and Web servers, and can access most common databases, including MySQL. PHP may be run as a separate program or compiled as a module for use with the Apache Web server.
PHP actually provides two different MySQL API extensions:
-
mysql
: Available for PHP versions 4 and 5, this extension is intended for use with MySQL versions prior to MySQL 4.1. This extension does not support the improved authentication protocol used in MySQL 5.0, nor does it support prepared statements or multiple statements. If you wish to use this extension with MySQL 5.0, you will likely want to configure the MySQL server to use the --old-passwords option (see Section A.2.3, “Client does not support authentication protocol
”). This extension is documented on the PHP Web site at http://php.net/mysql. -
mysqli
- Stands for “MySQL, Improved”; this extension is available only in PHP 5. It is intended for use with MySQL 4.1.1 and later. This extension fully supports the authentication protocol used in MySQL 5.0, as well as the Prepared Statements and Multiple Statements APIs. In addition, this extension provides an advanced, object-oriented programming interface. You can read the documentation for themysqli
extension at http://php.net/mysqli. A helpful article can be found at http://www.zend.com/php5/articles/php5-mysqli.php.
If you're experiencing problems with enabling both the
mysql
and the mysqli
extension when building PHP on Linux yourself, see
Section 22.3.2, “Enabling Both mysql
and mysqli
in
PHP”.
The PHP distribution and documentation are available from the
PHP Web site. MySQL
provides the mysql
and
mysqli
extensions for the Windows operating
system for MySQL versions as of 5.0.18 on
http://dev.mysql.com/downloads/connector/php/.
You can find information why you should preferably use the
extensions provided by MySQL on that page.
-
Error: Maximum Execution Time Exceeded
: This is a PHP limit; go into thephp.ini
file and set the maximum execution time up from 30 seconds to something higher, as needed. It is also not a bad idea to double the RAM allowed per script to 16MB instead of 8MB. -
Fatal error: Call to unsupported or undefined function mysql_connect() in ...
: This means that your PHP version isn't compiled with MySQL support. You can either compile a dynamic MySQL module and load it into PHP or recompile PHP with built-in MySQL support. This process is described in detail in the PHP manual. -
Error: Undefined reference to 'uncompress'
: This means that the client library is compiled with support for a compressed client/server protocol. The fix is to add-lz
last when linking with-lmysqlclient
. -
Error: Client does not support authentication protocol
: This is most often encountered when trying to use the oldermysql
extension with MySQL 4.1.1 and later. Possible solutions are: downgrade to MySQL 4.0; switch to PHP 5 and the newermysqli
extension; or configure the MySQL server with--old-passwords
. (See Section A.2.3, “Client does not support authentication protocol
”, for more information.)
Those with PHP4 legacy code can make use of a compatibility layer for the old and new MySQL libraries, such as this one: http://www.coggeshall.org/oss/mysql2i.
If you're experiencing problems with enabling both the
mysql
and the mysqli
extension when building PHP on Linux yourself, you should try
the following procedure.
-
Configure PHP like this:
./configure --with-mysqli=/usr/bin/mysql_config --with-mysql=/usr
-
Edit the
Makefile
and search for a line that starts withEXTRA_LIBS
. It might look like this (all on one line):EXTRA_LIBS = -lcrypt -lcrypt -lmysqlclient -lz -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm -lmysqlclient -lz -lcrypt -lnsl -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lcrypt
Remove all duplicates, so that the line looks like this (all on one line):
EXTRA_LIBS = -lcrypt -lcrypt -lmysqlclient -lz -lresolv -lm -ldl -lnsl -lxml2
-
Build and install PHP:
make make install