文章教程

18.3PHP操作MySQL数据库的函数

9/17/2020 9:40:31 PM 人评论 次浏览

18.3 PHP操作MySQL数据库的函数

下面介绍PHP操作MySQL数据库所使用的各个函数的含义和使用方法。

18.3.1 通过mysqli类库访问MySQL数据库

PHP操作MySQL数据库是通过PHP的mysqli类库完成的。这个类是PHP专门针对MySQL数据库的扩展接口。

下面以通过Web向user数据库请求数据为例,介绍使用PHP函数处理MySQL数据库数据。

01 在网址主目录下创建phpmysql文件夹。

02 在phpmysql文件夹下建立文件htmlform.html,输入代码如下。

  <html>
  <head>
     <title>Finding User</title>
  </head>
  <body>
    <h2>Finding users from mysql database.</h2>
    <form action="formhandler.php" method="post">
       Fill user name:
       <input name="username" type="text" size="20"/> <br />
  	 <input name="submit" type="submit" value="Find"/>
    </form>
  </body>
  </html>

03 在phpmysql文件夹下建立文件formhandler.php,输入代码如下。

  <html>
  <head>
     <title>User found</title>
  </head>
  <body>
     <h2>User found from mysql database.</h2>
  <?php
      $username = $_POST['username'];
  	if(!$username){
  	    echo "Error: There is no data passed.";
  	    exit;
  	}
  	
  	if(!get_magic_quotes_gpc()){
  		$username = addslashes($username);
  	}
  		@ $db = mysqli_connect('localhost','root','753951','adatabase');
  	
  		if(mysqli_connect_errno()){
  	 	 echo "Error: Could not connect to mysql database.";
  	 	 exit;
  		}
  		
  		$q = "SELECT * FROM user WHERE name = '".$username."'";
  		$result = mysqli_query($db,$q);
  		$rownum = mysqli_num_rows($result);
  		
  		for($i=0; $i<$rownum; $i++){
  		   $row = mysqli_fetch_assoc($result);
  		   echo "Id:".$row['id']."<br />";
  		   echo "Name:".$row['name']."<br />";
  		   echo "Age:".$row['age']."<br />";
  		   echo "Gender:".$row['gender']."<br />";
  		   echo "Info:".$row['info']."<br />";
  		}
  		mysqli_free_result($result);
  		mysqli_close($db);
  	
  ?>
  </body>
  </html>

04 运行htmlform.html,结果如图18-3所示。

image

图18-3 htmlform.html页面

05 在文本框中输入用户名“lilili”,单击“Find”按钮,页面跳转至formhandler.php,并且返回请求结果,如图18-4所示。

image

图18-4 formhandler.php页面

在下面的小节中,将详细分析此案例中所用函数的含义和使用方法。

18.3.2 使用mysqli_connect()函数连接MySQL服务器

PHP使用mysqli_connect()函数连接到MySQL数据库的。

mysqli_connect()函数的格式如下:

  mysqli_connect('MySQL服务器地址', '用户名', '用户密码', '要连接的数据库名')

例如:

  $db=mysqli_connect('localhost','root','753951','adatabase');

该语句就是通过此函数连接到MySQL数据库并且把此连接生成的对象传递给名为$db的变量,也就是对象$db。其中“MySQL服务器地址”为'localhost',“用户名”为'root',“用户密码”为本环境root设定密码'753951',“要连接的数据库名”为'adatabase'。

默认情况下,MySQL服务的端口号为3360,如果采用默认的端口号,可以不用指定;如果采用了其他的端口号,如采用1066端口,则需要特别指定,例如127.0.0.1:1066,表示MySQL服务于本地机器的1066端口。

提 示

其中localhost换成本地地址或者127.0.0.1,都能实现同样的效果。

18.3.3 使用mysqli_select_db()函数选择数据库文件

连接到数据库以后,就需要选择数据库,只有选择了数据库,才能对数据表进行相关的操作。这里需要使用函数mysqli_select_db()来选择。它的格式为:

  mysqli_select_db(数据库服务器连接对象,目标数据库名)

在18.3.1节实例中的$db = mysqli_connect('localhost','root','753951','adatabase');语句已经通过传递参数值'adatabase'确定了需要操作的数据库。如果不传递此参数,mysqli_connect()函数只提供“MYSQL服务器地址”,“用户名”和“用户密码”一样可以连接到MySQL数据库服务器并且以相应的用户登录。如上例的语句变为$db = mysqli_connect('localhost','root','753951');也是成立的。

但是,在这样的情况下,就必须继续选择具体的数据库来进行操作。

如果把上例中的formhandler.php文件中的下面的语句:

  @ $db = mysqli_connect('localhost','root','753951','adatabase');

修改为以下两个语句替代:

  @ $db = mysqli_connect('localhost','root','753951');
  mysqli_select_db($db,'adatabase');

程序运行效果将完全一样。

在新的语句中mysqli_select_db($db,'adatabase');语句确定了“数据库服务器连接对象”为$db,“目标数据库名”为'adatabase'。

18.3.4 使用mysqli_query()函数执行SQL语句

使用mysqli_query()函数执行SQL语句,需要向此函数中传递两个参数,一个是MySQL数据库服务器连接对象,一个是以字符串表示的SQL语句。mysqli_query()函数的格式如下:

  mysqli_query(数据库服务器连接对象,SQL语句)

在18.3.1节的实例中mysqli_query($db,$q);语句就表明了“数据库服务器连接对象”为$db,“SQL语句”为$q,而$q用$q = "SELECT * FROM user WHERE name = '".$username."'";语句赋值。

更重要的是mysqli_query()函数执行SQL语句之后会把结果返回。上例中就是返回结果并且赋值给$result变量。

18.3.5 使用mysqli_fetch_assoc ()函数从数组结果集中获取信息

使用mysqli_fetch_assoc()函数从数组结果集中获取信息,只要确定sql请求返回的对象就可以了。

所以$row = mysqli_fetch_assoc($result);语句直接从$result结果中取得一行,并且以关联数组的形式返回给$row。

由于获得的是关联数组,所以在读取数组元素的时候是要通过字段名称确定数组元素的。上例中echo "Id:".$row['id']."<br />";语句就是通过“id”字段名确定数组元素的。

18.3.6 使用mysqli_fetch_object()函数从结果中获取一行作为对象

使用mysqli_fetch_object()函数从结果中获取一行作为对象,同样是确定SQL请求返回的对象就可以了。

把18.3.1节中实例中的程序:

  for($i=0; $i<$rownum; $i++){
      $row = mysqli_fetch_assoc($result);
      echo "Id:".$row['id']."<br />";
      echo "Name:".$row['name']."<br />";
      echo "Age:".$row['age']."<br />";
      echo "Gender:".$row['gender']."<br />";
      echo "Info:".$row['info']."<br />";
      }

修改如下:

  for($i=0; $i<$rownum; $i++){
      $row = mysqli_fetch_object($result);
      echo "Id:".$row->id."<br />";
      echo "Name:".$row->name."<br />";
      echo "Age:".$row->age."<br />";
      echo "Gender:".$row->gender."<br />";
      echo "Info:".$row->info."<br />";
  }

之后,程序的整体运行结果相同。不同的是,修改之后的程序采用了对象和对象属性的表示方法。但是最后输出的数据结果是相同的。

18.3.7 使用mysqli_num_rows()函数获取查询结果集中的记录数

使用mysqli_num_rows()函数获取查询结果包含的数据记录的条数,只需要给出返回的数据对象就可以了。

例如18.3.1节实例中,$rownum = mysqli_num_rows($result);语句查询了$result的记录的条数,并且赋值给$rownum变量。然后程序利用这个条数的数值,实现了一个for循环,遍历所有记录。

18.3.8 使用mysqli_free_result()函数释放资源

释放资源的函数为mysqli_free_result(),函数的格式为:

  mysqli_free_result(SQL请求所返回的数据库对象)

在一切操作都基本完成以后,18.3.1节实例中程序通过mysqli_free_result($result);语句释放了SQL请求所返回的对象$result所占用的资源。

18.3.9 使用mysqli_close()函数关闭连接

在连接数据库时,可以使用mysqli_connect()函数。与之相对应,在完成了一次对服务器的使用的情况下,需要关闭此连接,以免对MySQL服务器中数据的误操作和对资源的释放。一个服务器的连接也是一个对象型的数据类型。

mysqli_connect()函数的格式为:

  mysqli_connect(需要关闭的数据库连接对象)

在18.3.1节中实例的程序mysqli_close($db);语句关闭了“需要关闭的数据库连接对象”为$db对象。

教程类别