从 MySQL 数据库获取数据


通过 PHP 函数 mysql_query 执行 SQL SELECT 语句可以从 MySQL 表中获取数据。您有多种选择从 MySQL 获取数据。

最常用的选项是使用函数mysql_fetch_array()。此函数以关联数组、数值数组或两者的形式返回行。如果没有更多行,则此函数返回 FALSE。

下面是一个从员工表中获取记录的简单示例。

例子

尝试以下示例来显示员工表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "EMP ID :{$row['emp_id']}  <br> ".
         "EMP NAME : {$row['emp_name']} <br> ".
         "EMP SALARY : {$row['emp_salary']} <br> ".
         "--------------------------------<br>";
   }
   
   echo "Fetched data successfully\n";
   
   mysql_close($conn);
?>

行的内容被分配给变量 $row,然后打印 row 中的值。

注意- 当您想要将数组值直接插入字符串时,请始终记住添加大括号。

在上面的示例中,常量MYSQL_ASSOC用作 mysql_fetch_array() 的第二个参数,以便它以关联数组的形式返回行。使用关联数组,您可以使用字段名称而不是索引来访问字段。

PHP 提供了另一个名为mysql_fetch_assoc()的函数,它也将行作为关联数组返回。

例子

尝试以下示例,使用 mysql_fetch_assoc() 函数显示员工表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_assoc($retval)) {
      echo "EMP ID :{$row['emp_id']}  <br> ".
         "EMP NAME : {$row['emp_name']} <br> ".
         "EMP SALARY : {$row['emp_salary']} <br> ".
         "--------------------------------<br>";
   }
   
   echo "Fetched data successfully\n";
   
   mysql_close($conn);
?>

您还可以使用常量MYSQL_NUM作为 mysql_fetch_array() 的第二个参数。这将导致函数返回一个带有数字索引的数组。

例子

尝试以下示例,使用 MYSQL_NUM 参数显示员工表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "EMP ID :{$row[0]}  <br> ".
         "EMP NAME : {$row[1]} <br> ".
         "EMP SALARY : {$row[2]} <br> ".
         "--------------------------------<br>";
   }
   
   echo "Fetched data successfully\n";
   
   mysql_close($conn);
?>

上述三个例子都会产生相同的结果。

释放内存

在每个 SELECT 语句结束时释放游标内存是一个很好的做法。这可以通过使用 PHP 函数mysql_free_result()来完成。下面的示例展示了如何使用它。

例子

尝试下面的例子

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT emp_id, emp_name, emp_salary FROM employee';
   mysql_select_db('test_db');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "EMP ID :{$row[0]}  <br> ".
         "EMP NAME : {$row[1]} <br> ".
         "EMP SALARY : {$row[2]} <br> ".
         "--------------------------------<br>";
   }
   
   mysql_free_result($retval);
   echo "Fetched data successfully\n";
   
   mysql_close($conn);
?>

在获取数据时,您可以根据需要编写复杂的 SQL。程序将与上述相同。

php_and_mysql.htm