关联课件:5子项目五 -PHP操作MySQL方法详解(点击在线预览)
5.3.3 PHP操作MySQL方法详解
5.3.3.1 PHP提供的MySQL操作函数
PHP提供了大量函数,使用户可以方便地使用PHP连接到MySQL数据库,并对数据进行操作。学习PHP+MySQL数据库编程,首先要了解这些函数,明确具体的步骤,然后才能进入实质性开发阶段。
PHP中可以用来操作MySQL数据库的函数如表5-1所示。
这些函数中,最常用的有mysql_connect()、mysql_select_db()、mysql_query()、mysql_ fetch_array()、mysql_num_rows()、mysql_close()等,下面就着重介绍这几个函数的使用。
5.3.3.2 在PHP中操纵MySQL
1.mysql_connect()函数
根据图5-3中的流程,要在PHP中操作MySQL中的数据,第一步就是连接到数据库服务器,也就是建立一条PHP程序到MySQL数据库之间的通道。这样PHP才能通过这个通道来向MySQL服务器发送各种指令,并取得指令执行的结果,将这些结果应用于PHP程序中。mysql_connect()函数就是用来建立和MySQL数据库的连接。
mysql_connect()函数有5个参数,但是通常情况下只用前3个参数,其格式如下:
resource mysql_connect (string server, string username, string password)
该函数返回类型为resource型,即资源型。3个参数分别为MySQL服务器地址、MySQL用户名、密码。这里的用户名可以用超级管理员的,也可以用用户表中存在的其他用户。如下面的语句将用超级管理员身份建立一个到本地服务器的连接:
$id=mysql_connect ("localhost","root","root");
其中“localhost”换成“127.0.0.1”或本地机器的实际IP地址,效果都是相同的。另外服务器地址后面可以指定MySQL服务的端口号,如果是采用默认的3306端口,则不必指定。如果采用了其他端口,则需要指定,如“127.0.0.1:88”表示MySQL服务于本地机器的88端口。用户名和密码均需指定(如密码为空,则直接用两个引号即可)。
将以上代码写在一个PHP程序中,写法如下:
<?php
$id=mysql_connect("localhost","root","root");
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数据库作为当前要操作的数据库。
1: <!--文件5-1.php:连接数据库服务器,选择数据库-->
2: <HTML>
3: <HEAD>
4: <TITLE>连接数据库服务器,选择数据库</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $id=mysql_connect("localhost","root","root");
9: if ($id){
10: echo "OK,数据库连接成功!<br>";
11: $ok=mysql_select_db("student",$id);
12: if($ok){
13: echo "OK,选择数据库成功!";
14: }else{
15: echo "OH,选择数据库失败,请确认数据库是否存在。";
16: }
17: }else{
18: echo "OH,数据库连接失败!请检查服务器地址、用户名和地址是否正确!
<br>";
19: }
20: ?>
21: </BODY>
22: </HTML>
本程序第8行建立了一个到本地MySQL数据库服务器的连接。第11行用mysql_select_ db()函数来指定要操作的数据库。函数第一个参数为数据库的名字,第二个参数为应用于哪个连接。第二个参数可以省略,省略时默认使用当前连接。一般来说,此参数可以直接省略。
mysql_select_db()函数返回一个布尔型值。如果执行成功返回true,失败则返回false。函数没有任何错误信息提示。因此即使提供的数据库名有错误或数据库不存在,本函数也不会报错。程序将返回结果存放在$ok中,通过判断$ok的值来判断是否执行成功。程序5-1.php正确执行的效果如图5-4所示。
图5-4 程序5-1.php的运行结果
3.mysql_query()函数
连接到数据库服务器,并选择了要操作的数据库之后,下一步就向服务器发送操作指令,也就是SQL语句了。第7章讲过的SQL语句,在这里可以派上用场了。现在来看一个例子,用PHP程序在MySQL中创建一个数据库newdata,并在这个数据库中创建一个表testtable,表的字段可以随意设置几个。
1: <!--文件5-2.php:用PHP创建新数据库和表-->
2: <HTML>
3: <HEAD>
4: <TITLE>用PHP创建新数据库和表</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: if (!$id=mysql_connect("localhost","root","root")){
9: echo "数据库服务器连接错误!";
10: exit; //如果数据库服务器连接不成功,退出程序执行
11: }
12: echo "数据库服务器连接成功!<br>";
13: if (!mysql_query("CREATE DATABASE newdata",$id)){
14: echo"数据库创建不成功,请检查账号权限和数据库是否已经存在!";
15: exit; //如果数据库创建不成功,退出程序执行
16: }
17: echo "数据库创建成功!<br>";
18: if (!mysql_select_db("newdata",$id)){
19: echo "数据库选择不成功!";
20: exit; //如果数据库选择不成功,退出程序执行
21: }
22: echo "数据库选择成功!<br>";
23: if (!mysql_query("CREATE TABLE testtable (name varchar(10), age int(4))",$id)){
24: echo "数据表创建不成功,请检查SQL语句是否正确!";
25: exit; //如果SQL执行不成功,退出程序执行
26: }
27: echo "数据表创建成功!<br>";
28: if (mysql_close($id)){
29: echo "数据服务器连接关闭成功!";
30: }
31: ?>
32: </BODY>
33: </HTML>
本程序正确执行的效果如图5-5所示,再次刷新后的执行效果如图5-6所示。
图5-5 程序5-2.php正确运行的结果
图5-6 程序5-2.php第二次运行的结果
程序5-2.php的输出结果已经详细说明了创建数据库和数据表的基本步骤,程序中注释也说明了每条语句的作用,这里就不再多说了。如果用phpMyAdmin或第7章讲过的命令提示符进入MySQL控制台,就会发现已经成功创建了一个名为newdata的数据库。打开此数据库,可以看到数据库中有一个testtable表。这也就是说程序执行的不仅仅是输出结果成功,而是真正的成功。
通过程序可以看出mysql_query()函数的使用十分简单,只需要将一条SQL语句作为参数传递过去,即可执行此SQL语句。第二个参数$id在一般情况下同样可以省略。
使用mysql_query()函数可以向数据库服务器发送任何合法的SQL指令(前提是数据库要支持该指令)。程序5-2.php只是测试了CREATE指令,实际上第7章讲的INSERT、SELECT、UPDATE、DELETE等指令同样可以用mysql_query()来执行。下面就利用循环向服务器发送多次INSERT指令,向刚才创建的testtable表中插入多条记录。
1: <!--文件5-3.php:用PHP向表中插入数据-->
2: <HTML>
3: <HEAD>
4: <TITLE>用PHP向表中插入数据</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $id=mysql_connect("localhost","root","root");
9: mysql_select_db("newdata",$id);
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(); //输出上一次MySQL执行的错误信息
21: }
22: }
23: mysql_close($id);
24: ?>
25: </BODY>
26: </HTML>
为了节省程序代码,程序5-3.php的第8~9行的数据库服务器的连接、数据库的选择就没有再进行正确性验证。程序5-3.php的运行结果如图5-7所示。
图5-7 程序5-3.php的运行结果
要验证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)
可见数据确实已经成功插入到数据库中。
程序5-3.php看起来行数较多,但是其结构却很简单。读者可以根据所学知识分析一下。在这里仅指出3点。
1)第11~12行将要插入的两个字段的值放在两个变量中,然后在第13行构造一个SQL语句,第14行执行这个语句。这里之所以采用变量存放字段值和SQL语句,一是为了使程序更加易读,另外可以避免写成一条综合语句过于复杂而容易出错。读者要尤其注意的是第13行,在构造SQL语句(其实就是一个普通字符串)时,不同数据类型的变量用不同的引号连接。其实这个问题应该是一个PHP基本语法的问题,很多初学者在这个地方容易犯迷糊,因此请读者多加揣摩,仔细体会。
2)第20行首次使用mysql_error()函数。这个函数可以返回上一次MySQL返回的错误信息。当程序出错时输出这些错误信息对于程序的调试很有帮助。读者可以试着故意写错SQL语句,或者故意发送一条非法指令到MySQL服务器,然后调用此函数查看返回的错误信息。
3)如果插入数据后出现了乱码,则需要设置相关的编码,因为这里采用的是默认编码,即Latin1字符集,所以就省略了向数据库发送SET CHARACTER指令。如果数据库服务器设置的是gb2312字符集,必须在第9行后加入“mysql_query("SET CHARACTER SET gb2312");”进行字符设置。这条指令与程序功能无关。这条语句是否加入以及具体设置什么样的字符集与服务器采用的MySQL版本以及安装MySQL时的设置有关。而且值得注意的是,插入时进行了字符的设置,从数据库中读出数据时也必须进行同样的设置,否则就会出现乱码。
下面再来看一个从数据库中读取数据并用表格显示在网页上的例子。还是用mysql_ query()函数,向数据库发送SELECT指令来查询数据。
1: <!--文件5-4.php:用PHP从表中读取数据-->
2: <HTML>
3: <HEAD>
4: <TITLE>用PHP从表中读取数据</TITLE>
5: </HEAD>
6: <BODY>
7: <?php
8: $id=mysql_connect("localhost","root","root");
9: mysql_select_db("newdata",$id);
10: $query="SELECT * FROM testtable";
11: $result=mysql_query($query,$id);
12: $datanum=mysql_num_rows($result);
13: echo "表testtable中共有".$datanum."条数据<br>";
14: ?>
15: <table width="228" height="34" border="1">
16: <?php while ($info=mysql_fetch_array($result,MySQL_ ASSOC)){ ?>
17: <tr>
18: td width="99" height="28"><?php echo $info["name"]?> </td>
19: <td width="113"><?php echo $info["age"]?></td>
20: </tr>
21: <?php }?>
22: </table>
23: <?php mysql_close($id);?>
24: </BODY>
25: </HTML>
程序5-4.php的输出结果如图5-8所示。
图5-8 程序5-4.php在Dreamweaver的显示
序5-4.php在代码中加入了一些HTML代码,用来产生一个表格。程序又用到了几个新的函数,下面就来一一介绍。
1)第11行中,向服务器发送了一条SELECT指令。这条指令将返回所有满足条件的记录。注意返回的记录是一个资源类型,其内容是若干条记录的集合,可以成为一个记录集。不能直接用来输出,先将返回的数据存放在$result中。
2)第13行,用mysql_num_rows()函数来统计一个记录集中记录的条数。注意此函数专用于统计MySQL查询结果记录数,不能用来统计其他数据类型的元素个数。
3)第16~21行,充分说明了PHP是一种嵌入式脚本语言,而且要养成一个好的习惯,就是当有PHP和HTML代码混合时尽量把PHP代码嵌入到HTML中,这样在网页可视化的编辑工具如Dreamweaver中就可以很好地把PHP代码和网页界面分离开,便于编辑,如图5-9所示。
图5-9 程序5-4.php的运行结果
4)第16行是关键。这一行用到了mysql_fetch_array()函数。此函数是PHP+MySQL编程中最常用的函数之一。此函数的格式如下:
array mysql_fetch_array (resource result [, int result_type])
该函数的作用是读取记录集result中的当前记录,将记录的各个字段的值存入一个数组中,并返回这个数组,然后将记录集指针移动到下一条记录。如果记录集已经到达末尾,则返回false。
第2个参数result_type为可选,此参数用来设置返回的数组采用什么样的下标。有3个备选值:MySQL_ASSOC、MySQL_NUM、MySQL_BOTH,其含义如下:
①MySQL_ASSOC:返回的数组将以该记录的字段名称作为下标。如在本例中要输出此数组中的“姓名”字段,可以用$info[‘name’]。这里$info是数组名,“name”是存放姓名的字段名。
②MySQL_NUM:返回的数组以从0开始的数字为下标。在本例中,返回的每条记录只有两个字段,那么数组也就只有两个元素,分别用$info[0]、$info[1]来引用。
③MySQL_BOTH:返回的数组既可以用字段名为下标,也可以用数字为下标。在本例中,既可以用$info[0]来取得姓名,也可以用$info[‘name’]来取得。
读者可以自行修改程序,对上述3个参数进行测试。
此外,PHP中还有mysql_fetch_row()、mysql_fetch_assoc()、mysql_fetch_object()等函数,这些函数的作用与用法都和mysql_fetch_array()函数相似,读者可以参考PHP手册,了解这几个函数的使用。
用mysql_query()函数,结合第8章讲过的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页面以及它的包含文件)执行结束时,这个脚本中打开的PHP连接也会同时被关闭。因此一般情况下即使忘记了手工关闭也没有关系。但是数据库使用完毕后关闭连接是一个很好的编程习惯。
mysql_query()-查询MySQL 格式: resource mysql_query (string query, [resource link_id]) 例: $linkId = @mysql_connect("localhost", "username", "password") or die("不能连接到Mysql Server"); @mysql_select_db("MyDatabase") or die("不能选择这个数据库,或者数据库不存在"); $query = "select * from MyTable"; $result = mysql_query($query); mysql_close(); 说明:若SQL查询执行成功,则返回资源标识符,失败时返回FALSE。若执行更新成功,则返回TRUE,否则返回FALSE
老师讲的很详细,从中学到了很多。
函数与数据库之间密切联系
经过学习自己试了一下学会了好多的知识
内容很多,很详细,慢慢细细品味就知道其中的意义了 ,虽然总是出错,但学会的感觉很爽