PHP Manual
后退 |  | 前进

# LXXX. MySQL 函数库

# 简介

你可以使用该函数库访问 MySQL 数据库服务器。有关 MySQL 的详细信息可以到 http://www.mysql.com/ 查询。

MySQL 的文档可以在 http://dev.mysql.com/doc/ 找到。

# 需求

为了能够顺利的使用该函数库，你必须在编译 PHP 的时候添加 MySQL 的支持。

# 安装

µ±ÄãÑ¡ÔñÁË --with-mysql[=DIR] ÅäÖÃÑ¡ÏîµÄÊ±ºò£¬Äã´ò¿ªÁË PHP ·ÃÎÊ MySQL Êý¾Ý¿âµÄ¹¦ÄÜ¡£

PHP 4 Ä¬ÈÏÊ¹ÓÃÁË --with-mysql Ñ¡Ïî£¬Òò´ËÒª½ûÓÃ MySQL ±ØÐëÊ¹ÓÃ --without-mysql¡£ÔÚ PHP 4 ÖÐ£¬Èç¹ûÄãÃ»ÓÐÔÚÅäÖÃÑ¡ÏîÖÐÖ¸¶¨ MySQL µÄÂ·¾¶ÐÅÏ¢£¬PHP »áÊ¹ÓÃ°ó¶¨µÄ MySQL ¿Í»§¶Ë¿â¡£ÔÚ Windows ÏÂ£¬Ã»ÓÐÏà¹ØµÄ DLL ÎÄ¼þ£¬¸ÃÄ£¿éÒÑ¾ÄÚ½¨ÔÚÁË PHP ÄÚºËÖÐ¡£ÓÃ»§Èç¹ûÔËÐÐÆäËüÊ¹ÓÃ MySQL µÄÓ¦ÓÃ£¨ÀýÈçÍ¬Ê±Ê¹ÓÃ Apache Ä£¿é»¯·½Ê½ÔËÐÐµÄ PHP 3 ºÍ PHP 4£¬»òÕß auth-mysql Ä£¿é£©ÐèÒªÖ¸¶¨ MySQLµÄÂ·¾¶£º--with-mysql=/path/to/mysql¡£Õâ»áÇ¿ÆÈ PHP Ê¹ÓÃ MySQL °²×°µÄ¿Í»§¶Ë¿âº¯ÊýÀ´±ÜÃâÈÎºÎ³åÍ»¡£

ÔÚ PHP 5 ÖÐ£¬MySQL ²»ÔÙÄ¬ÈÏµÄ¿ªÆô£¬MySQL ¿âÒ²²»ÔÙºÍ PHP °ó¶¨£¬ÇëÔÄ¶Á¸Ã FAQ ÒÔ»ñÈ¡¸üÏêÏ¸µÄÐÅÏ¢¡£

¸Ã MySQL À©Õ¹¿âÎÞ·¨ºÍ 4.1.0 ÒÔÉÏ°æ±¾µÄ MySQL Ò»Æð¹¤×÷¡£ÕâÊ±£¬ÄúÐèÒªÊ¹ÓÃ MySQLi¡£

警告
µ±¸ÃÀ©Õ¹Ä£¿éÓë recode À©Õ¹Ä£¿é¹²Í¬Ê¹ÓÃµÄÊ±ºò£¬¿ÉÄÜ»áÔì³É PHP µÄ±ÀÀ£ºÍÆô¶¯Ê±³öÏÖÎÊÌâ¡£Çë²éÑ¯ recode À©Õ¹»ñµÃ¸ü¶àµÄÐÅÏ¢¡£

> 注: Èç¹ûÄúÐèÒª³ý latin£¨Ä¬ÈÏ£©ÒÔÍâÆäËüµÄ×Ö·û¼¯£¬ÄúÐèÒª°²×°ÓÐÒÑ±àÒë×Ö·û¼¯Ö§³ÖµÄÍâÖÃ£¨Î´¼¯³É£©libmysql¡£

# 运行时配置

这些函数的行为受 `php.ini` 的影响。

表格 1. MySQL ÅäÖÃÑ¡Ïî

Ñ¡ÏîÃû³Æ | Ä¬ÈÏÖµ | ¿É±äµÄ
--- | --- | ---
mysql.allow_persistent | "On" | PHP_INI_SYSTEM
mysql.max_persistent | "-1" | PHP_INI_SYSTEM
mysql.max_links | "-1" | PHP_INI_SYSTEM
mysql.default_port | NULL | PHP_INI_ALL
mysql.default_socket | NULL | PHP_INI_ALL
mysql.default_host | NULL | PHP_INI_ALL
mysql.default_user | NULL | PHP_INI_ALL
mysql.default_password | NULL | PHP_INI_ALL
mysql.connect_timeout | "0" | PHP_INI_SYSTEM

¸üÏêÏ¸µÄÐÅÏ¢ÒÔ¼° PHP_INI_* ³£Á¿µÄ¶¨Òå£¬Çë²Î¿¼ ini_set()¡£

以下是该配置选项的简要解释。

mysql.allow_persistent boolean

  ÊÇ·ñÔÊÐí ±£³ÖÁ¬½Ó µ½ MySQL¡£

mysql.max_persistent integer

  Ã¿¸ö½ø³ÌÖÐ×î´ó±£³ÖÁ¬½ÓÊý¡£

mysql.max_links integer

  Ã¿¸ö½ø³ÌÖÐ×î´óµÄÁ¬½ÓÊý£¬°üÀ¨±£³ÖÁ¬½Ó¡£

mysql.default_port string

  Ö¸¶¨Ä¬ÈÏÁ¬½ÓÊý¾Ý¿âµÄ TCP ¶Ë¿ÚºÅ¡£Èç¹ûÃ»ÓÐÖ¸¶¨Ä¬ÈÏ¶Ë¿ÚºÅ£¬²àË³Ðò´Ó MYSQL_TCP_PORT »·¾³±äÁ¿£¬`/etc/services` ÎÄ¼þÖÐµÄ mysql-tcp Ïî»òÕß±àÒëÊ±Ö¸¶¨µÄ MYSQL_PORT ³£Á¿ÖÐ»ñµÃ¡£Win32 »·¾³ÏÂÖ»»áÊ¹ÓÃ MYSQL_PORT ³£Á¿¡£

mysql.default_socket string

  µ±Ê¹ÓÃ±¾µØÁ¬½ÓµÄÊ±ºò£¬Ä¬ÈÏµÄ socket Ãû³Æ¡£

mysql.default_host string

  Ä¬ÈÏÁ¬½ÓµÄÊý¾Ý¿â·þÎñÆ÷µØÖ·¡£¸Ã²ÎÊý²»ÄÜÓÃÓÚ°²È«Ä£Ê½¡£

mysql.default_user string

  Ä¬ÈÏÁ¬½ÓÊý¾Ý¿âÊ±Ê¹ÓÃµÄÓÃ»§Ãû¡£¸Ã²ÎÊý²»ÄÜÓÃÓÚ°²È«Ä£Ê½¡£

mysql.default_password string

  Ä¬ÈÏÁ¬½ÓÊý¾Ý¿âÊ±Ê¹ÓÃµÄÃÜÂë¡£¸Ã²ÎÊý²»ÄÜÓÃÓÚ°²È«Ä£Ê½¡£

mysql.connect_timeout integer

  Á¬½Ó³¬Ê±ÃëÊý¡£ÔÚ Linux ÖÐ£¬Õâ¸ö²ÎÊýÉè¶¨ÁËµÈºòÀ´×Ô·þÎñÆ÷µÄÏìÓ¦µÄÊ±³¤¡£

# 资源类型

在 MySQL 模块中使用了两种资源类型。第一种是数据库的连接句柄，第二种是 SQL 查询返回的结果集。

# 预定义常量

以下常量由本扩展模块定义，因此只有在本扩展模块被编译到 PHP 中，或者在运行时被动态加载后才有效。

在 PHP 4.3.0 以后的版本中，允许在 mysql_connect() 函数和 mysql_pconnect() 函数中指定更多的客户端标记。下面列出所定义的常量：

表格 2. MySQL 客户端常量

常量 | 描述
--- | ---
MYSQL_CLIENT_COMPRESS | 使用压缩的通讯协议
MYSQL_CLIENT_IGNORE_SPACE | 允许在函数名后留空格位
MYSQL_CLIENT_INTERACTIVE | 允许设置断开连接之前所空闲等候的 interactive_timeout 时间。（代替 wait_timeout）

mysql_fetch_array() 函数使用一个常量来表示所返回数组的类型。下面是常量的定义：

表格 3. MySQL fetch 常量

常量 | 描述
--- | ---
MYSQL_ASSOC | 返回的数据列使用字段名作为数组的索引名。
MYSQL_BOTH | 返回的数据列使用字段名及数字索引作为数组的索引名。
MYSQL_NUM | 返回的数据列使用数字索引作为数组的索引名。索引从 0 开始，表示返回结果的第一个字段。

# 例

这个简单的例子演示如何连接数据库，执行查询语句，打印返回结果集和断开数据库等一系列基本的 MySQL 操作。

例子 1. MySQL 扩展范例

`<?php
/* 连接选择数据库 */
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Could not connect : " . mysql_error());
print "Connected successfully";
mysql_select_db("my_database") or die("Could not select database");
/* 执行 SQL 查询 */
$query = "SELECT * FROM my_table";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
/* 在 HTML 中打印结果 */
print "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";
/* 释放资源 */
mysql_free_result($result);
/* 断开连接 */
mysql_close($link);
?>`

后退 | 起点 | 前进
muscat_setup | 上一级 | mysql_affected_rows