14.1 操作MySQL的PHP函数
PHP提供了完整的操作MySQL数据库的函数,这些函数覆盖从连接数据库、执行SQL语句、处理数据结果集到关闭数据库的方方面面。PHP通过这些函数,使基于MySQL数据库的Web开发高效而简单。通常,PHP访问MySQL数据库的步骤如图14-1所示。
图14-1 PHP访问MySQL数据库的步骤
从图14-1不仅可以看出PHP如何完成对数据库的操作,也可以看出PHP操作数据库时将要使用到的函数类别。本节先介绍用来操作MySQL数据库的常用PHP函数,这些函数的具体应用将在14.2~14.4节分别举例介绍。
14.1.1 连接和关闭数据库的函数
在用PHP执行具体的MySQL操作之前,首先要让PHP程序连接到一个MySQL数据库服务器。PHP提供了函数mysql_connect()打开一个到MySQL服务器的连接,语法如下。
mysql_connect(string $server, string $user_name, string $password, [bool $new_link, int $client_type]);
·第1个参数$server代表要连接的MySQL数据库服务器,可以给这个参数附加端口号。
·第2个参数$user_name是连接MySQL服务器的用户名。
·第3个参数$password就是该用户所使用的密码。
·第4个参数$new_link是可选的,它表示是否在下次使用同样的参数调用mysql_connect()时,建立一个与MySQL的新的连接,该参数是BOOL型变量。
·第5个参数$client_type表示客户端连接MySQL服务器的类型,这个参数在实际应用中使用的比较少,这里不做详细介绍。
如果成功建立了一个到MySQL服务器的连接,该函数会返回一个MySQL连接标识符,否则它会返回FALSE。例如如下代码即可实现连接本地的MySQL服务器。
$conn = mysql_connect('localhost','root','user_pass');
这行代码以用户名root、密码user_pass连接本地(localhost)的MySQL数据库服务器,如果连接建立成功,$conn就代表了对MySQL数据库的连接。
注意 事实上,函数mysql_connect()的5个参数全部是可选的。因为在php.ini文件中可以设置这些参数的默认值,例如mysql.default_host用来设置默认的MySQL服务器。如果php.ini文件中没有指定这些参数的默认值,那么在调用mysql_connect()时必须为其指定参数。
PHP完成对数据库的操作和管理之后,需要在程序中关闭已建立的数据库连接。使用函数mysql_close()可以关闭一个已经建立的连接,语法如下。
bool mysql_close ([resource $link]);
函数mysql_close()关闭连接符$link指定的MySQL连接。如果连接$link关闭成功,该函数返回TRUE,否则返回FALSE。通常,PHP脚本执行结束后,到MySQL数据库的连接就会关闭,除非之前明确调用了函数mysql_close()。
14.1.2 执行SQL语句的函数
函数mysql_query()在当前已建立连接的数据库中执行一条SQL语句,语法如下。
mysql_query(string $sql);
参数$sql是一个SQL语句字符串,该语句可以不以分号结尾。该函数执行成功,会返回一个资源标识符,失败时返回FALSE。
说明 函数mysql_query()仅对SHOW、SELECT、DESCRIBE等语句返回一个资源标识,对于其他SQL语句,mysql_query()在执行成功时返回TRUE,出错时返回FALSE。如果查询一个当前连接用户没有权限管理的表,mysql_query()也会返回FALSE。
14.1.3 处理查询结果集的函数
在PHP程序的具体应用中,当一个SQL语句执行完毕后,通常需要对查询的结果集做处理,以满足Web应用的需要。处理数据结果集的PHP函数主要有以下几个。
·函数mysql_affected_rows():取得前一次MySQL操作所影响的记录行数。如果函数执行成功,返回上一次SQL语句执行所影响的行数,否则返回-1。
·函数mysql_fetch_row($result):参数$result是执行mysql_query()之后返回的资源标识符。该函数从查询结果集中返回一行数据。该函数返回值是一个数组,其中每个元素对应一行结果记录的字段值。依次调用该函数可以返回结果集中的下一行,如果没有更多行,函数返回FALSE。
·函数mysql_fetch_array($result,$type):参数$result是执行mysql_query()之后返回的资源标识符。该函数从结果集中返回一行作为关联数组,或普通数组,或二者兼有。第2个参数$type用来指定返回数组的类型,它的值可以是MYSQL_ASSOC(返回关联数组)、MYSQL_NUM(普通数组)和MYSQL_BOTH(两种数组类型兼有)。实际应用中,通常使用该函数取得记录各字段的值。
·函数mysql_fetch_assoc($result):与函数mysql_fetch_array()类似,只不过该函数只将结果集作为关联数组返回。
14.1.4 获取字段信息的函数
函数mysql_fetch_field()可以取得结果集的字段信息,并将其作为对象返回,语法如下。
object mysql_fetch_field ($result [, int field_offset]);
参数$result是执行mysql_query()之后返回的资源标识符。可选参数$field_offset用来指定字段偏移量,如果没有指定该参数,函数mysql_fetch_field()将获取下一个取得的字段。函数mysql_fetch_field()返回一个对象,其属性存储了字段信息,该对象的属性如下所述。
·name:字段名。
·table:该字段所在的表名。
·max_length:该字段最大长度。
·not_null:如果该属性值为1,表示该字段不能为NULL。
·primary_key:如果该属性值为1,表示字段列是primarykey。
·unique_key:如果该属性值为1,表示该字段是uniquekey。
·multiple_key:如果该属性值为1,表示该字段是non-uniquekey。
·numeric:如果该属性值为1,表示该字段是numeric。
·blob:如果该属性值为1,表示该字段是BLOB。
·type:该字段的类型。
·unsigned:如果该属性值为1,表示该字段是无符号数。
·zerofill:如果该属性值为1,表示该字段填充0。
14.1.5 数据库操作的其他函数
数据库操作的其他函数如下所述。
·函数mysql_select_db($database):连接上MySQL数据库之后,可以使用该函数选择一个数据库。参数$database表示要选择的数据库名称。
·函数mysql_num_rows($result):用来取得结果集的行数目,即结果集中的记录数。参数$result是执行mysql_query()之后返回的资源标识符。不过,该函数仅对SELECT语句有效,要取得INSERT、UPDATE或DELETE语句执行后所影响的行的数据,需要使用函数mysql_affected_rows()。
·函数mysql_error():返回最近一次MySQL操作产生的错误文本信息。如果没有出错,函数返回空字符串。