最详细的PHP操作MYSQL数据库入门教程.docx
最详细的PHP操作MYSQL数据库入门教程最详细的PHP操作MYSQL数据库入门教程 作者:聂庆鹏 PHP是一门Web编程语言,而MySQL是一款网络数据库系统。这二者是目前Web开发中最黄金的组合之一。那么PHP是如何操作MySQL数据库的呢?从根本上来说,PHP是通过预先写好的一些列函数来与MySQL数据库进行通信,向数据库发送指令、接收返回数据等都是通过函数来完成。图9-1给出了一个普通PHP程序与MySQL进行通信的基本原理示意图。 MYSQL数据库服务器 数据库1 PHP 程序 表1_1 表1_2 PHP 函数 数据库2 表2_1 表2_2 图9-1 PHP程序与MySQL数据库通信原理示意图 上图展示了PHP程序连接到MySQL数据库服务器的原理。可以看出,PHP通过调用自身的专门用来处理MySQL数据库连接的函数,来实现与MySQL通信。而且,PHP并不是直接操作数据库中的数据,而是把要执行的操作以SQL语句的形式发送给MySQL服务器,由MySQL服务器执行这些指令,并将结果返回给PHP程序。MySQL数据库服务器可以比作一个数据“管家”。其他程序需要这些数据时,只需要向“管家”提出请求,“管家”就会根据要求进行相关的操作或返回相应的数据。 明白了PHP操作MySQL的流程,我们就很容易掌握PHP操作MySQL的相关函数。因为以上几乎每一个步骤,都有相应的函数与之对应。开发PHP数据库程序时,只需要按照流程调用相关函数,数据库操作便可轻松实现。 ·PHP操作MySQL常用函数 PHP开发者为我们提供了大量函数,使我们可以方便的使用PHP连接到MySQL数据库,并对数据进行操作。学习PHP+MYSQL数据库编程,首先要了解这些函数,明确具体的步骤,然后才能进入实质性开发阶段。 PHP中可以用来操作MYSQL数据库的函数见表9-1: 这些函数中,最常用的有mysql_connect、mysql_select_db、mysql_query、mysql_fetch_array、mysql_num_rows、mysql_close等。下面我们就着重介绍这几个函数的使用。 表9-1 PHP的MYSQL函数一览 函数名 mysql_affected_rows mysql_change_user mysql_client_encoding mysql_close mysql_connect mysql_create_db mysql_data_seek mysql_db_name mysql_db_query mysql_drop_db mysql_errno mysql_error 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_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql_insert_id mysql_list_dbs mysql_list_fields mysql_list_processes mysql_list_tables mysql_num_fields mysql_num_rows mysql_pconnect mysql_ping mysql_query mysql_result mysql_select_db 功 能 取得前一次 MySQL 操作所影响的记录行数 改变活动连接中登录的用户 返回字符集的名称 关闭 MySQL 连接 打开一个到 MySQL 服务器的连接 新建一个 MySQL 数据库 移动内部结果的指针 取得结果数据 发送一条 MySQL 查询 丢弃一个 MySQL 数据库 返回上一个 MySQL 操作中的错误信息的数字编码 返回上一个 MySQL 操作产生的文本错误信息 从结果集中取得一行作为关联数组,或数字数组,或二者兼有 从结果集中取得一行作为关联数组 从结果集中取得列信息并作为对象返回 取得结果集中每个输出的长度 从结果集中取得一行作为对象 从结果集中取得一行作为枚举数组 从结果中取得和指定字段关联的标志 返回指定字段的长度 取得结果中指定字段的字段名 将结果集中的指针设定为制定的字段偏移量 取得指定字段所在的表名 取得结果集中指定字段的类型 释放结果内存 取得 MySQL 客户端信息 取得 MySQL 主机信息 取得 MySQL 协议信息 取得 MySQL 服务器信息 取得最近一条查询的信息 取得上一步 INSERT 操作产生的 ID 列出 MySQL 服务器中所有的数据库 列出 MySQL 结果中的字段 列出 MySQL 进程 列出 MySQL 数据库中的表 取得结果集中字段的数目 取得结果集中行的数目 打开一个到 MySQL 服务器的持久连接 Ping 一个服务器连接,如果没有连接则重新连接 发送一条 MySQL 查询 取得结果数据 选择 MySQL 数据库 mysql_stat mysql_tablename mysql_thread_id 取得当前系统状态 取得表名 返回当前线程的 ID ·PHP对MySQL数据库的操纵 1、mysql_connect函数 要在PHP中操作MySQL中的数据,第一步就是连接到数据库服务器。也就是建立一条PHP程序到MySQL数据库之间的通道。这样PHP才能通过这个通道来向MySQL服务器发送各种指令,并取得指令执行的结果,将这些结果应用于PHP程序中。mysql_connect函数就是用来建立和MySQL数据库的连接。 mysql_connect函数有5个参数,但是通常情况下我们只用到前三个参数。格式如下: resource mysql_connect ( string server, string username , string password) 该函数返回类型为resource型,即资源型。三个参数分别为MySQL服务器地址、MySQL用户名、密码。这里的用户名可以用超级管理员的,也可以用用户表中存在的其他用户。如下面的语句将用超级管理员身份建立一个到本地服务器的连接: $id=mysql_connect(“localhost”,”root”,”1234”); 其中“localhost”换成“127.0.0.1”或本地机器的实际IP地址,效果都是相同的。另外服务器地址后面可以指定MySQL服务的端口号,如果是采用默认的3306端口,则不必指定。如果采用了其他端口,则需要指定,如“127.0.0.1:88”表示MySQL服务于本地机器的88端口。用户名和密码均需指定。 将以上代码写在一个PHP程序中,写法如下: <?php $id=mysql_connect(“localhost”,”root”,”1234”); echo $id; ?> 此程序运行之后,如果执行成功,则会输出一个资源型变量$id的编号,类似于“Resource id #2”。如果执行失败,则有多种可能。如果出现下列提示: Fatal error: Call to undefined function mysql_connect in 则说明本地服务器的MySQL扩展库尚未被载入,因此PHP解释器无法识别MySQL函数。请参照本章第一节的内容进行重新设置。 如果出现下列提示: Warning: mysql_connect function.mysql-connect: Unknown MySQL server host 则说明MySQL服务器地址错误,可能是输入有错误,或者服务器没有启动,或者段口号不对。这时可以检查函数的第一个参数是否提供正确,MySQL是否已成功启动。 还有可能出现下列提示: Warning: mysql_connect function.mysql-connect: Access denied for user 这说明用户名或密码有错误。或者本帐号没有在本MySQL服务器上登陆的权限。 我们这里之所以如此详细地讲解该函数,就是因为这时连接到MySQL数据库的第一步。只要这一步成功了,那么下面的所有函数便都能运行。连接到数据库是一切工作的起点。因此必须保证此步骤成功,才能继续下面的内容。 2、mysql_select_db函数 连接到数据库以后,我们还不能直接操作某个表,因为表都存储在各个数据库当中,需要首先选择要操作的数据库,才能对这个数据库下面的表进行操作。mysql_select_db函数就是用来指定要操作的数据库。前面的例子中我们曾在MySQL中创建了一个student数据库,下面的代码将连接到数据库服务器,并把student数据库作为当前要操作的数据库。 <!-文件9-1.php:连接到MySQL数据库服务器并选择数据库-> 1: <?php 2: $id=mysql_connect(“localhost”,”root”,”1234”); 3: $ok=mysql_select_db(“student”,$id); 4: if($ok) 5: echo "OK,选择数据库成功!" 6: else 7: echo "OH,选择数据库失败,请确认数据库是否存在。" 8: 9: ?> 本程序中第1行我们建立了一个到本地MySQL数据库服务器的连接。第2行用mysql_select_db函数来指定要操作的数据库。函数第一个参数为数据库的名字,第二个参数为应用于哪个连接。第二个参数可以省略,省略时默认使用当前连接。一般来说,此参数可以直接省略。 mysql_select_db函数返回一个布尔型值。如果执行成功返回true,失败则返回false。函数没有任何错误信息提示。因此即使你提供的数据库名有错误或数据库不存在,本函数也不会报错。因此,我们将返回结果存放在$ok中,通过判断$ok的值来判断是否执行成功。 3、mysql_query函数 连接到数据库服务器,并选择了要操作的数据库之后,下一步就是向服务器发送操作指令,也就是SQL语句。这需要大家对MYSQL和SQL语句有一点基本了解。现在我们来看一个例子,用PHP程序在MySQL中创建一个数据库newdata,并在这个数据库中创建一个表testtable,表的字段可以随意设置几个。 <!- 文件9-2.php:用PHP程序创建新数据库和表-> 1: <HTML> 2: <HEAD> 3: <TITLE>用PHP创建新数据库和表</TITLE> 4: </HEAD> 5: <BODY> 6: <?php 7: $id=mysql_connect("localhost","root","1234"); 8: mysql_query("CREATE DATABASE newdata",$id); 9: mysql_select_db("newdata",$id); 10: mysql_query("CREATE TABLE testtable(name varchar(10),age int(4)",$id); 11: mysql_close($id) 12: ?> 13:</BODY> 14: </HTML> 本程序执行完毕后不会有任何输出。但是如果进入MySQL控制台,查看数据库,就会发现已经成功创建了一个名为newdata的数据库。打开此数据库,可以看到数据库中有一个testtable表。程序执行成功。 通过程序可以看出mysql_query函数的使用十分简单,只需要将一条SQL语句作为参数传递过去,即可执行此SQL语句。第二个参数$id在一般情况下同样可以省略。 使用mysql_query函数可以向数据库服务器发送任何合法的SQL指令。9-2.php中我们只是测试了CREATE指令,实际上SQL中常用的INSERT、SELECT、UPDATE、DELETE等基本指令同样可以用mysql_query来执行。下面我们就利用循环向服务器发送多次INSERT指令,向刚才创建的testtable表中插入多条记录。 <-文件9-3.php:用PHP向表中插入数据-> 1: <HTML> 2: <HEAD> 3: <TITLE>用PHP向表中插入数据</TITLE> 4: </HEAD> 5: <BODY> 6: <?php 7: $id=mysql_connect("localhost","root","1234"); 8: mysql_select_db("newdata",$id); 9: mysql_query("SET CHARACTER SET gb2312"); 10: for($i=1;$i<6;$i+) 11: $nl=20+$i; 12: $xm="姓名".$i; 13: $sql="INSERT INTO testtable VALUES('".$xm."',".$nl.")" 14: $excu=mysql_query($sql,$id); 15: if($excu) 16: echo $sql; 17: echo "第".$i."条数据插入成功!<br>" 18: else 19: echo "数据插入失败,错误信息:<br>" 20: echo mysql_error; 21: 22: 23: mysql_close($id) 24: ?> 25: </BODY> 26: </HTML> 本程序的运行结果如图9-4所示: 图9-4 向表中插入数据 要验证5条信息是否都已确实插入到了数据库中,可以用命令提示符登陆控制台,用“SELECT * FROM testtable”命令来浏览表中的所有数据,也可以用phpMyAdmin来浏览。 控制台中显示的数据如下: mysql> select * from testtable; +-+-+ | name | age | +-+-+ | 姓名1 | 21 | | 姓名2 | 22 | | 姓名3 | 23 | | 姓名4 | 24 | | 姓名5 | 25 | +-+-+ 5 rows in set (0.00 sec) 可见数据确实已经成功插入到数据库中。 本程序看起来行数较多,但是其结构却很简单。读者可以根据所学知识分析一下。我们在这里仅指出三点: 1)第9行中,我们用mysql_query函数首先向数据库发送了一条SET CHARACTER指令。这条指令好像与我们的程序无关,为什么要用这条指令呢?原因是我们在本程序中向name字段中插入的值包含中文,如“姓名1”、“姓名2”,由于PHP向MySQL提交数据时默认采用Latin1字符集,而我们要向数据库中提交的是简体中文汉字,如果不事先将字符集设置为gb2312,则很可能会出现字符集不匹配而导致插入失败。 2)第11-12行,我们将要插入的两个字段的值放在两个变量中,然后在第13行构造一个SQL语句,第14行执行这个语句。这里之所以采用变量存放字段值和SQL语句,一是为了使程序更加易读,另外可以避免写成一条综合语句过于复杂而容易出错。读者要尤其注意的是第13行,我们在构造SQL语句时,不同数据类型的变量用不同的引号等连接。其实这个问题应该是一个PHP基本语法的问题,很多初学者在这个地方容易犯迷糊,因此请读者多加揣摩,仔细体会。 3)第20行我们首次使用mysql_error函数。这个函数可以返回上一次MySQL返回的错误信息。当程序出错时输出这些错误信息对于程序的调试很有帮助。读者可以试着故意写错SQL语句,或者故意发送一条非法指令到MySQL服务器,然后调用此函数查看返回的错误信息。 下面我们再来看一个从数据库中读取数据并用表格显示在网页上的例子。 还是用mysql_query函数,向数据库发送SELECT指令来查询数据。 <!-文件9-4.php:用PHP从表中读出数据-> 1: <HTML> 2: <HEAD> 3: <TITLE>用PHP从表中读取数据</TITLE> 4: </HEAD> 5: <BODY> 6: <?php 7: $id=mysql_connect("localhost","root","1234"); 8: mysql_select_db("newdata",$id); 9: mysql_query("SET CHARACTER SET gb2312"); 10: $query="SELECT * FROM testtable" 11: $result=mysql_query($query,$id); 12: echo "<table border=1 width=200><tr><td>姓名</td><td>年龄</td></tr>" 13: $datanum=mysql_num_rows($result); 14: echo "表testtable中共有".$datanum."条数据<br>" 15: for($i=1;$i<=$datanum;$i+) 16: $info=mysql_fetch_array($result,MYSQL_ASSOC); 17: echo "<tr><td>".$info'name'."</td>" 18: echo "<td>".$info'age'."</td></tr>" 19: 20: echo "</table>" 21: mysql_close($id); 22: ?> 23: </BODY> 24: </HTML> 本程序的输出结果如图9-5所示: 图9-5 从数据表中读出数据 本程序中,我们在代码中加入了一些HTML代码,用来产生一个表格。在本程序中,我们又用到了几个新的函数,下面我们就来一一介绍。 1) 第9行的字符集设置语句作用与9-3.php中相似,防止读出的数据出现乱码。 2)第11行中,我们向服务器发送了一条SELECT指令。这条指令将返回所有满足条件的记录。注意返回的纪录是一个资源类型,其内容是若干条记录的集合,可以成为一个记录集。不能直接用来输出,我们先将返回的数据存放在$result中。 3)第13行,我们用mysql_num_rows函数来统计一个记录集中记录的条数。注意此函数专用于统计MySQL查询结果记录集,不能用来统计其他数据类型的元素个数。 4)第16行,这一行是关键。这一行用到了mysql_fetch_array函数。此函数是PHP+MYSQL编程中最常用的函数之一。此函数的使用格式如下: array mysql_fetch_array ( resource result , int result_type ) 该函数的作用是,读取记录集result中的当前记录,将记录的各个字段的值存入一个数组中,并返回这个数组,然后将记录集指针移动到下一条记录。如果记录集已经到达末尾,则返回false。 第二个参数result_type为可选,此参数用来设置返回的数组采用什么样的下标。有三个备选值:MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH。三个参数的含义如下: MYSQL_ASSOC:返回的数组将以该记录的字段名称作为下标。如在本例中,要输出此数组中的“姓名”字段,可以用$infoname。这里$info是数组名,“name”是存放姓名的字段名。 MYSQL_NUM:返回的数组以从0开始的数字为下标。在本例中,返回的每条记录只有两个字段,那么数组也就只有两个元素,分别用$info0、$info1来引用。 MYSQL_BOTH:返回的数组既可以用字段名为下标,也可以用数字为下标。在本例中,既可以用$info0来取得姓名,也可以用$infoname来取得。 读者可以自行修改程序,试验一下上述三个参数。 此外,PHP中还有mysql_fetch_row、mysql_fetch_assoc、mysql_fetch_object等函数,这些函数的作用与用法都和mysql_fetch_array函数相似,读者可以参考PHP手册,了解一下这几个函数的使用。 用mysql_query函数,集合第八章中讲过的SQL语句,还可以轻松实现对表内数据的删除和修改。如下列代码: <?php $id=mysql_connect(“localhost”,”root”,”1234”); mysql_select_db(“newdata”,$id); mysql_query(“DELETE FROM testtable”,$id); mysql_close($id); ?> 这段程序执行后,会删除表testtable中的全部数据。 此外,用UPDATE语句可以实现对表内数据的修改。我们在此不再举例,读者可以自行编写程序练习一下。 4、mysql_close函数 此函数用来关闭一个数据库连接。其使用格式如下; bool mysql_close ( resource link_identifier ) 本函数只有一个可选参数link_identifier。此参数表示要关闭的连接的ID。也就是mysql_connect函数执行成功后返回的一个连接标记。参数为空时表示关闭当前连接。该函数返回一个布尔型结果。当关闭成功时返回true,关闭失败是返回false。 <?php $id=mysql_connect(“localhost”,”root”,”1234”); if(mysql_close($id) echo “关闭数据库连接成功!”; else echo “关闭数据库连接失败!”; ?> 上面的例子演示了mysql_close函数的使用。事实上,当一个PHP脚本执行结束时,在这个脚本中打开的PHP连接也会同时被关闭。因此一般情况下及时忘记了手工关闭也无关紧要。但是数据库使用完毕后关闭连接是一个很好的编程习惯。