MySQL 查詢資料
MySQL 資料庫使用SQL SELECT語句來查詢資料。
你可以通過 mysql> 指令提示視窗中在資料庫中查詢資料,或者通過PHP腳本來查詢資料。
文法
以下為在MySQL資料庫中查詢資料通用的 SELECT 文法:
SELECT column_name,column_name
FROM table_name[WHERE Clause][LIMIT N][ OFFSET M]
- 查詢語句中你可以使用一個或者多個表,表之間使用逗号(,)分割,并使用WHERE語句來設定查詢條件。
- SELECT 指令可以讀取一條或者多條記錄。
- 你可以使用星号(*)來代替其他字段,SELECT語句會傳回表的所有字段資料
- 你可以使用 WHERE 語句來包含任何條件。
- 你可以使用 LIMIT 屬性來設定傳回的記錄數。
- 你可以通過OFFSET指定SELECT語句開始查詢的資料偏移量。預設情況下偏移量為0。
通過指令提示符擷取資料
以下執行個體我們将通過 SQL SELECT 指令來擷取 MySQL 資料表 runoob_tbl 的資料:
執行個體
以下執行個體将傳回資料表 runoob_tbl 的所有記錄:
讀取資料表:
select * from runoob_tbl;
輸出結果:

使用PHP腳本來擷取資料
使用 PHP 函數的 mysqli_query() 及 SQL SELECT 指令來擷取資料。
該函數用于執行 SQL 指令,然後通過 PHP 函數 mysqli_fetch_array() 來使用或輸出所有查詢的資料。
mysqli_fetch_array() 函數從結果集中取得一行作為關聯數組,或數字數組,或二者兼有 傳回根據從結果集取得的行生成的數組,如果沒有更多行則傳回 false。
以下執行個體為從資料表 runoob_tbl 中讀取所有記錄。
嘗試以下執行個體來顯示資料表 runoob_tbl 的所有記錄。
使用 mysqli_fetch_array MYSQL_ASSOC 參數擷取資料:
<?php
$dbhost = 'localhost:3306'; // mysql伺服器主機位址
$dbuser = 'root'; // mysql使用者名
$dbpass = '123456'; // mysql使用者名密碼
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('連接配接失敗: ' .mysqli_error($conn));
}
// 設定編碼,防止中文亂碼
mysqli_query($conn , "set names utf8");
$sql = 'SELECT runoob_id, runoob_title,
runoob_author, submission_date
FROM runoob_tbl';
mysqli_select_db( $conn, 'RUNOOB' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
die('無法讀取資料: ' . mysqli_error($conn));
echo '<h2>菜鳥教程 mysqli_fetch_array 測試<h2>';
echo '<table border="1"><tr><td>教程 ID</td><td>标題</td><td>作者</td><td>送出日期</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
echo "<tr><td> {$row['runoob_id']}</td> ".
"<td>{$row['runoob_title']} </td> ".
"<td>{$row['runoob_author']} </td> ".
"<td>{$row['submission_date']} </td> ".
"</tr>";}echo '</table>';mysqli_close($conn);?>
echo '</table>';
mysqli_close($conn);
?>
輸出結果如下所示:
以上執行個體中,讀取的每行記錄指派給變量 $row,然後再列印出每個值。
注意:記住如果你需要在字元串中使用變量,請将變量置于花括号。
在上面的例子中,PHP mysqli_fetch_array() 函數第二個參數為 MYSQL_ASSOC, 設定該參數查詢結果傳回關聯數組,你可以使用字段名稱來作為數組的索引。
PHP 提供了另外一個函數 mysqli_fetch_assoc(), 該函數從結果集中取得一行作為關聯數組。 傳回根據從結果集取得的行生成的關聯數組,如果沒有更多行,則傳回 false。
嘗試以下執行個體,該執行個體使用了 mysqli_fetch_assoc() 函數來輸出資料表 runoob_tbl 的所有記錄:
使用 mysqli_fetch_assoc 擷取資料:
$dbhost = 'localhost:3306'; // mysql伺服器主機位址
$dbuser = 'root'; // mysql使用者名
$dbpass = '123456'; // mysql使用者名密碼
die('連接配接失敗: ' . mysqli_error($conn));
runoob_author, submission_date
FROM runoob_tbl';
mysqli_select_db( $conn, 'RUNOOB' );
{
die('無法讀取資料: ' . mysqli_error($conn));
echo '<h2>菜鳥教程 mysqli_fetch_assoc 測試<h2>';
while($row = mysqli_fetch_assoc($retval))
echo "<tr><td> {$row['runoob_id']}</td> ".
"<td>{$row['runoob_title']} </td> ".
"<td>{$row['runoob_author']} </td> ".
"<td>{$row['submission_date']} </td> ".
"</tr>";
你也可以使用常量 MYSQL_NUM 作為 PHP mysqli_fetch_array() 函數的第二個參數,傳回數字數組。
以下執行個體使用 MYSQL_NUM 參數顯示資料表 runoob_tbl 的所有記錄:
使用 mysqli_fetch_array MYSQL_NUM 參數擷取資料:
$dbhost = 'localhost:3306'; // mysql伺服器主機位址
$dbuser = 'root'; // mysql使用者名
$dbpass = '123456'; // mysql使用者名密碼
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);if(! $conn )
mysqli_query($conn , "set names utf8");
$sql = 'SELECT runoob_id, runoob_title,
runoob_author, submission_date
FROM runoob_tbl';
die('無法讀取資料: ' . mysqli_error($conn));
while($row = mysqli_fetch_array($retval, MYSQL_NUM))
echo "<tr><td> {$row[0]}</td> ".
"<td>{$row[1]} </td> ".
"<td>{$row[2]} </td> ".
"<td>{$row[3]} </td> ".
"</tr>";
以上三個執行個體輸出結果都一樣。
記憶體釋放
在我們執行完 SELECT 語句後,釋放遊标記憶體是一個很好的習慣。
可以通過 PHP 函數 mysqli_free_result() 來實作記憶體的釋放。
以下執行個體示範了該函數的使用方法。
嘗試以下執行個體:
使用 mysqli_free_result 釋放記憶體:
$dbhost = 'localhost:3306'; // mysql伺服器主機位址
$dbuser = 'root'; // mysql使用者名
$dbpass = '123456'; // mysql使用者名密碼
$sql = 'SELECT runoob_id, runoob_title,
FROM runoob_tbl';
die('無法讀取資料: ' . mysqli_error($conn));
"<td>{$row[2]} </td> ".
"<td>{$row[3]} </td> ".
"</tr>";}
echo '</table>';// 釋放記憶體
mysqli_free_result($retval);