SQL 的 SELECT 命令用于從 MySQL 數(shù)據(jù)庫中獲取數(shù)據(jù)??梢栽趍ysql> 提示符中使用這一命令,也可以利用 PHP 等腳本來完成。
利用 SELECT 命令從 MySQL 表中獲取數(shù)據(jù)的一般語法格式如下:
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
*)代替字段。這時,SELECT 將返回所有字段。 使用 SELECT 命令從表 tutorials_tbl 中獲取數(shù)據(jù)。
下面這個范例將返回表 tutorials_tbl 中的所有記錄。
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
| 1 | Learn PHP | John Poul | 2007-05-21 |
| 2 | Learn MySQL | Abdul S | 2007-05-21 |
| 3 | JAVA Tutorial | Sanjay | 2007-05-21 |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)
mysql>
同樣,也可以在 mysql_query() 函數(shù)中使用 SQL 命令 SELECT。該函數(shù)用于執(zhí)行 SQL 命令。隨后另一個 PHP 函數(shù) mysql_fetch_array() 會獲取所有選定的數(shù)據(jù),該函數(shù)會將行以關(guān)聯(lián)數(shù)組或數(shù)值數(shù)組返回,或者還可能同時返回以上兩種形式。如果再也沒有行,則該函數(shù)返回 FALSE。
下面通過一個簡單的范例來了解如何獲取 tutorials_tbl 表中的記錄。
下面這個范例會獲取表 tutorials_tbl 中的所有記錄。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
行的內(nèi)容被賦給變量 $row,隨后輸出行內(nèi)所包含的值。
注意:一定要記住,在把一個數(shù)組值直接插入到字符串中時,一定要加花括號(
{與})。
在上面的例子中,常量 MYSQL_ASSOC 被用作 PHP 函數(shù) mysql_fetch_array() 的第二個參數(shù),因此才會將行按照關(guān)聯(lián)數(shù)組的形式返回。利用關(guān)聯(lián)數(shù)組,我們可以使用字段的名字來訪問字段,而不需要用到索引。
PHP 還提供了另一個叫做 mysql_fetch_assoc() 的函數(shù),也會將行以關(guān)聯(lián)數(shù)組的形式返回。
在下面的范例中,利用 mysql_fetch_assoc() 函數(shù)來顯示 tutorials_tbl 表中的所有記錄。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_assoc($retval))
{
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
你可以使用常量 MYSQL_NUM 作為 mysql_fetch_array() 函數(shù)的第二個參數(shù)。這能讓函數(shù)返回一個帶有數(shù)字索引的數(shù)組。
在下面的范例中,使用參數(shù) MYSQL_NUM 來顯示表 tutorials_tbl 中的所有記錄。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ".
"Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
以上三個范例都會產(chǎn)生同樣的結(jié)果。
在每個 SELECT 語句末尾釋放游標(biāo)內(nèi)存是一個非常好的做法。使用 PHP 函數(shù) mysql_free_result() 就可以實現(xiàn)這一點,如下例所示。
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_NUM))
{
echo "Tutorial ID :{$row[0]} <br> ".
"Title: {$row[1]} <br> ".
"Author: {$row[2]} <br> ".
"Submission Date : {$row[3]} <br> ".
"--------------------------------<br>";
}
mysql_free_result($retval);
echo "Fetched data successfully\n";
mysql_close($conn);
?>
在獲取數(shù)據(jù)時,還可以用更復(fù)雜的SQL語句。步驟和上面介紹的一樣。