MySQL选择查询
SQL的SELECT命令用于从MySQL数据库获取数据。你可以在mysql>提示符以及任何脚本(如PHP)中使用此命令。
语法
这是SELECT命令的通用SQL语法,用于从MySQL表中获取数据:
SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]
可以使用一个或多个用逗号分隔的表来使用WHERE子句来包含各种条件,但是WHERE子句是SELECT命令的可选部分。
可以在一个SELECT命令中获取一个或多个字段。
可以指定星号(*)代替字段。在这种情况下,SELECT将返回所有字段。
可以使用WHERE子句指定任何条件。
可以使用以下方式指定偏移量OFFSETSELECT从那里开始返回记录。默认情况下,偏移量从零开始。
可以使用LIMIT属性。
从命令提示符中获取数据
这将使用SQL SELECT命令从MySQL表中获取数据newbiego_tbl.
以下示例将返回的所有记录newbiego_tbl表:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * from newbiego_tbl +-------------+----------------+-----------------+-----------------+ | newbiego_id | newbiego_title | newbiego_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>
使用PHP脚本获取数据
你可以在PHP函数中使用相同的SQL SELECT命令mysql_query()。此函数用于执行SQL命令,然后再执行另一个PHP函数mysql_fetch_array()可用于获取所有选定的数据。此函数以关联数组和/或数字数组的形式返回该行。如果没有更多行,此函数将返回FALSE。
以下程序是一个简单的示例,该示例将说明如何从newbiego_tbl表。
以下代码块将显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date FROM newbiego_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['newbiego_id']} <br> ". "Title: {$row['newbiego_title']} <br> ". "Author: {$row['newbiego_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(),它还以关联数组的形式返回该行。
下面的示例使用mysql_fetch_assoc()函数显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date FROM newbiego_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['newbiego_id']} <br> ". "Title: {$row['newbiego_title']} <br> ". "Author: {$row['newbiego_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参数显示newbiego_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 newbiego_id, newbiego_title, newbiego_author, submission_date FROM newbiego_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); ?>
以上三个示例都将产生相同的结果。
释放内存
在每个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 newbiego_id, newbiego_title, newbiego_author, submission_date FROM newbiego_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); ?>
在获取数据时,你可以根据需要编写复杂的代码,但是该过程将与上面提到的相同。