SELECT 语句用于从数据库中选取数据。
语法
SELECT column_name(s) FROM table_name
注释:SQL 语句对大小写不敏感。SELECT 与 select 等效。
为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数。该函数用于向 MySQL 发送查询或命令。
例子
下面的例子选取存储在 "Persons" 表中的所有数据(* 字符选取表中所有数据):
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "
";
}
mysql_close($con);
?>
上面这个例子在 $result 变量中存放由 mysql_query() 函数返回的数据。接下来,我们使用 mysql_fetch_array() 函数以数组的形式从记录集返回第一行。每个随后对 mysql_fetch_array() 函数的调用都会返回记录集中的下一行。 while loop 语句会循环记录集中的所有记录。为了输出每行的值,我们使用了 PHP 的 $row 变量 ($row['FirstName'] 和 $row['LastName'])。
以上代码的输出:
Peter Griffin
Glenn Quagmire
在 HTML 表格中显示结果
下面的例子选取的数据与上面的例子相同,但是将把数据显示在一个 HTML 表格中:
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
echo "
Firstname | Lastname |
---|
while($row = mysql_fetch_array($result))
{
echo "
";echo "
" . $row['FirstName'] . "";echo "
" . $row['LastName'] . "";echo "
";}
echo "
";mysql_close($con);
?>
以上代码的输出:
Firstname
Lastname
Glenn
Quagmire
Peter
Griffin
如果用了 MYSQL_BOTH,将得到一个同时包含关联和数字索引的数组。
用 MYSQL_ASSOC 只得到关联索引(如同mysql_fetch_assoc() 那样),
用 MYSQL_NUM 只得到数字索引(如同 mysql_fetch_row 那样)。
1. mysql_fetch_array($rs,MYSQL_ASSOC)
[@test01 model]# php test.php
Array
(
[name] => hellokitty
[addr] => i dont kno
)
[@test01 model]# more test.php
$link=mysql_connect("10.12.136.181","hello","hello");
if(!$link)
echo "没有连接成功!";
mysql_select_db("hhhhh", $link);
$q = "SELECT * FROM hello";
mysql_query("SET NAMES GB2312");
$rs = mysql_query($q);
if(!$rs)
{
die("Valid result!");
}
$result=mysql_fetch_array($rs,MYSQL_ASSOC);
print_r($result);
mysql_free_result($rs);
?>
2.mysql_fetch_array($rs,MYSQL_BOTH);获取数组
[@test01 model]# more test.php
$link=mysql_connect("10.12.136.181","hello","hello");
if(!$link)
echo "没有连接成功!";
mysql_select_db("hhhhh", $link);
$q = "SELECT * FROM hello";
mysql_query("SET NAMES GB2312");
$rs = mysql_query($q);
if(!$rs)
{
die("Valid result!");
}
$result=mysql_fetch_array($rs,MYSQL_ASSOC);
print_r($result);
mysql_free_result($rs);
?>
[@test01 model]# vim test.php
[@test01 model]# php test.php
Array
(
[0] => hellokitty
[name] => hellokitty
[1] => i dont kno
[addr] => i dont kno
)
[@test01 model]#
3.mysql_fetch_array($rs,MYSQL_NUM) 获取数组
[@test01 model]# php test.php
Array
(
[0] => hellokitty
[1] => i dont kno
)
[@test01 model]# more test.php
$link=mysql_connect("10.12.136.181","hello","hello");
if(!$link)
echo "没有连接成功!";
mysql_select_db("hhhhh", $link);
$q = "SELECT * FROM hello";
mysql_query("SET NAMES GB2312");
$rs = mysql_query($q);
if(!$rs)
{
die("Valid result!");
}
$result=mysql_fetch_array($rs,MYSQL_NUM);
print_r($result);
mysql_free_result($rs);
?>
[@test01 model]#
下面是补充:
php获取结果集的几个方法
$conn=mysql_connect("localhost","root","");
$select=mysql_select_db("books",$conn);
$query="insert into computers(name,price,publish_data) ";
$query.="values('JSP',28.00,'2008-11-1')";
$query="select * from computers";
$result=mysql_query($query);
//以下是使用mysql_result()函数来获取到查询结果
$num=mysql_num_rows($result);
for($rows_count=0;$rows_count
echo "书名:".mysql_result($result,$rows_count,"name");
echo "价格:".mysql_result($result,$rows_count,"price");
echo "出版日期:".mysql_result($result,$rows_count,"publish_data")."
";
}
//以下是使用mysql_fetch_row()函数来获取到查询结果
while($row=mysql_fetch_row($result))
{
echo "书号:".$row[0]."
";
echo "书名:".$row[1]."
";
echo "价格:".$row[2]."
";
echo "出版日期:".$row[3]."
";
echo "
";
}
//以下是使用mysql_fetch_array()函数来获取到查询结果
while($row=mysql_fetch_array($result))
{
echo "书号:".$row[0]."
";
echo "书名:".$row[1]."
";
echo "价格:".$row["price"]."
";
echo "出版日期:".$row["publish_data"]."
";
echo "
";
}
//mysql_fetch_assoc()同mysql_fetch_array($result,MYSQL_ASSOC)一样
while($row = mysql_fetch_assoc($res)){
echo $row['price'].'::'.$row['publish_data'].”;
} //$row[0]不能取值
//以下是使用mysql_fetch_object()函数来获取到查询结果
while($row=mysql_fetch_object($result))
{
echo "书号:".$row->id."
";
echo "书名:".$row->name."
";
echo "价格:".$row->price."
";
echo "出版日期:".$row->publish_data."
";
echo "
";
}
?>
综合比较
本节主要介绍了获取查询结果集的4个函数,此处对它们进行综合比较。
● mysql_result():优点在于使用方便;而缺点在于功能少,一次调用只能获取结果数据集中的一行记录,对较大型的数据库效率较低。
● mysql_fetch_row():优点在于执行效率在4种方法中最高;不足在于只能用数字作为属性索引来获得属性值,在使用时非常容易出现混淆。
● mysql_fetch_array():执行效率同样很高,同mysql_fetch_row()相差无几,并且可以用属性名方式直接获取得属性值,因此,在实际应用中最常用。
● mysql_fetch_object():采用了面向对象的思想,在设计思路上更为先进,如果读者习惯于面向对象的思路来写程序,则会很自然的选择它。其次,该方法的优点还体现在,对于结构较为复杂的数据结果,在逻辑上显得更为清晰。
后3个函数的共同点在于,都是取得当前行的数据,然后自动滑向后一行。有时候,希望控制滑动的行数,这是常常搭配使用的一个函数是mysql_data_seek(),其定义为:
int mysql_data_seek(int result_identifier,int row_number)
调用该函数可以在结果集中向后滑动row_number行,在下一次调用mysql_fetch_*函数时,读取的将是向后滑动row_number行后的记录。