PHP 从MySQL数据库获取数据
通过PHP函数mysql_query执行SQL SELECT语句可以从MySQL表中获取数据。您有多种选项可以从MySQL中获取数据。
最常用的选项之一是使用函数 mysql_fetch_array() 。该函数以关联数组、数值数组或两者形式返回行数据。如果没有更多行可返回,该函数将返回FALSE。
下面是一个简单的示例,用于从 employee 表中获取记录。
示例
尝试以下示例以显示employee表中的所有记录。
<?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,然后打印行中的值。
注意 −在想要将数组值直接插入字符串时,始终记得加上花括号。
在上面的示例中,常量 MYSQL_ASSOC 用作mysql_fetch_array()的第二个参数,以便将行返回为关联数组。使用关联数组,您可以通过使用字段的名称而不是使用索引来访问字段。
PHP提供了另一个名为 mysql_fetch_assoc() 的函数,它也将行返回为关联数组。
示例
尝试以下示例,使用mysql_fetch_assoc()函数显示employee表中的所有记录。
<?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参数从employee表中显示所有记录。
<?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语句。程序将与上述所述的相同。