SQL SELECT命令用于从MySQL数据库获取数据。可以在MySQL>提示符使用这个命令,以及任何像PHP的脚本和语言等。
语法
下面是通用的SQL的SELECT命令语法,从MySQL表获取数据:
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]
可以使用分隔的一个或多个逗号从多个表,以及使用WHERE子句包括各种条件,但WHERE子句是SELECT命令的可选部分
可以在一个SELECT命令指定读取一个或多个字段
可以指定星号(*)代替选择的字段。在这种情况下,将返回所有字段
可以指定任意的条件在 WHERE 子句后面
可以使用OFFSET指定一个偏移量,SELECT从那里开始返回记录。默认情况下 offset 的值是 0
可以使用LIMIT属性限制返回的数量
1、从命令提示符读取数据
这将使用SQL SELECT命令从MySQL 表 tutorials_tbl 读取数据
示例
下面的例子将从 tutorials_tbl 表返回所有记录:
root@host# mysql -u root -p password; Enter password: mysql> use test; 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>
2、使用PHP脚本提取数据
可以使用相同的SQL SELECT命令,在PHP中的mysql_query()函数.此函数用于执行SQL命令,另一个更高版本PHP mysql_fetch_array()函数可用于获取所有选定的数据. 这个函数返回一行作为关联数组,数字数组,或两者兼而有。如果没有更多的行这个函数返回 FALSE。
下面是一个简单的例子来从tutorials_tbl表中提取记录。
示例
试试下面的例子来显示tutorials_tbl表中的所有记录。
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $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('test'); $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); ?>
数据库的行内容被分配到变量$row,并且行中的值将被打印出来。
注意: 当想直接插入数组值转换成字符串,一定记得使用花括号。
在上面的例子中,常量 MYSQL_ASSOC作为PHP函数 mysql_fetch_array() 的第二个参数, 因此,它返回该行作为关联数组。关联数组我们可以使用它的名称,而不是使用索引来访问该字段。
PHP提供了另一个函数 mysql_fetch_assoc(),也返回该行作为关联数组。
示例
试试下面的例子用来显示 tutorial_tbl 表所有的记录,使用 mysql_fetch_assoc() 函数例子如下:
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $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('test'); $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作为PHP mysql_fetch_array()函数的第二个参数。这会使该函数返回数字索引的数组。
示例
试试下面的例子来使用MYSQL_NUM 参数显示 tutorials_tbl 表的所有记录。
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $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('test'); $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); ?>
所有上述三个例子将产生相同的结果。
释放内存:
这是一个很好的做法,以释放内存光标在每个SELECT语句的结束。这可以通过使用PHP函数了mysql_free_result()来完成。下面是该例子,以显示它如何被使用。
示例
试试下面的例子
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $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('test'); $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); ?>
在读取数据时,可以根据需要编写复杂的SQL。如上所述过程将保持不变。