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_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_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);
?>

目录
mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数
mysql_change_user --  改变活动连接中登录的用户
mysql_client_encoding -- 返回字符集的名称
mysql_close -- 关闭 MySQL 连接
mysql_connect -- 打开一个到 MySQL 服务器的连接
mysql_create_db -- 新建一个 MySQL 数据库
mysql_data_seek -- 移动内部结果的指针
mysql_db_name -- 取得结果数据
mysql_db_query -- 发送一条 MySQL 查询
mysql_drop_db -- 丢弃(删除)一个 MySQL 数据库
mysql_errno --  返回上一个 MySQL 操作中的错误信息的数字编码
mysql_error --  返回上一个 MySQL 操作产生的文本错误信息
mysql_escape_string --  转义一个字符串用于 mysql_query
mysql_fetch_array --  从结果集中取得一行作为关联数组,或数字数组,或二者兼有
mysql_fetch_assoc --  从结果集中取得一行作为关联数组
mysql_fetch_field --  从结果集中取得列信息并作为对象返回
mysql_fetch_lengths --  取得结果集中每个输出的长度
mysql_fetch_object -- 从结果集中取得一行作为对象
mysql_fetch_row -- 从结果集中取得一行作为枚举数组
mysql_field_flags --  从结果中取得和指定字段关联的标志
mysql_field_len --  返回指定字段的长度
mysql_field_name --  取得结果中指定字段的字段名
mysql_field_seek --  将结果集中的指针设定为制定的字段偏移量
mysql_field_table --  取得指定字段所在的表名
mysql_field_type --  取得结果集中指定字段的类型
mysql_free_result -- 释放结果内存
mysql_get_client_info -- 取得 MySQL 客户端信息
mysql_get_host_info -- 取得 MySQL 主机信息
mysql_get_proto_info -- 取得 MySQL 协议信息
mysql_get_server_info -- 取得 MySQL 服务器信息
mysql_info --  取得最近一条查询的信息
mysql_insert_id --  取得上一步 INSERT 操作产生的 ID
mysql_list_dbs --  列出 MySQL 服务器中所有的数据库
mysql_list_fields -- 列出 MySQL 结果中的字段
mysql_list_processes -- 列出 MySQL 进程
mysql_list_tables -- 列出 MySQL 数据库中的表
mysql_num_fields -- 取得结果集中字段的数目
mysql_num_rows -- 取得结果集中行的数目
mysql_pconnect --  打开一个到 MySQL 服务器的持久连接
mysql_ping -- Ping 一个服务器连接,如果没有连接则重新连接
mysql_query -- 发送一条 MySQL 查询
mysql_real_escape_string --  转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
mysql_result -- 取得结果数据
mysql_select_db -- 选择 MySQL 数据库
mysql_stat -- 取得当前系统状态
mysql_tablename -- 取得表名
mysql_thread_id -- 返回当前线程的 ID
mysql_unbuffered_query --  向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行