1
2
3
4
5
6
7
8
9
10
11

PHP操作MySQL方法详解

发布时间:2017-07-20 07:59   发布人:毛书朋   浏览次数:9390


关联课件:5子项目五 -PHP操作MySQL方法详解(点击在线预览)



5.3.3  PHP操作MySQL方法详解

5.3.3.1  PHP提供的MySQL操作函数

      PHP提供了大量函数,使用户可以方便地使用PHP连接到MySQL数据库,并对数据进行操作。学习PHP+MySQL数据库编程,首先要了解这些函数,明确具体的步骤,然后才能进入实质性开发阶段。

PHP中可以用来操作MySQL数据库的函数如表5-1所示。

5-1.1.png

5-1.2.png

       这些函数中,最常用的有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.jpg

图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.jpg

图5-5  程序5-2.php正确运行的结果

5-6.jpg

图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.png

图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.jpg

图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.jpg

图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连接也会同时被关闭。因此一般情况下即使忘记了手工关闭也没有关系。但是数据库使用完毕后关闭连接是一个很好的编程习惯。



  • 孙淑平 2018-01-07 16:13:23
    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
  • 刘鑫蕊 2018-01-09 16:13:04
    老师讲的很详细,从中学到了很多。
  • 马文琦 2018-01-09 16:17:15
    函数与数据库之间密切联系
  • 岳猛 2018-01-09 16:28:43
    经过学习自己试了一下学会了好多的知识
  • 魏德旺 2018-01-09 16:30:33
    内容很多,很详细,慢慢细细品味就知道其中的意义了 ,虽然总是出错,但学会的感觉很爽