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子句指定任何条件。
    • 您可以使用OFFSET指定偏移量,SELECT将从该偏移量开始返回记录。默认情况下,偏移量从零开始。
    • 您可以使用LIMIT属性限制查询的记录条数。
  • 从命令提示符中获取数据

    这将使用SQL SELECT命令从MySQL表tutorials_tbl中获取数据。
    以下示例将返回tutorials_tbl表中的所有记录
    root@host# mysql -u root -p password;
    Enter password:*******
    mysql> use mydb;
    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>
  • 使用PHP脚本获取数据

    您可以在PHP函数mysqli_query()中使用相同的SQL SELECT命令。该函数用于执行SQL命令,然后可以使用另一个PHP函数mysqli_fetch_array()来获取所有选定的数据。此函数以关联数组,数字数组或两者兼有的形式返回该行。如果没有更多行,此函数将返回FALSE。
    下面的程序是一个简单的示例,它将显示如何从tutorials_tbl表中获取/显示记录。
    <?php
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = 'rootpassword';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    
    if(! $conn ) {
    die('Could not connect: ' . mysqli_error($conn));
    }
    $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';
    
    mysqli_select_db($conn,'mydb');
    $retval = mysqli_query( $conn, $sql );
    
    if(! $retval ) {
    die('Could not get data: ' . mysqli_error($conn));
    }
    
    while($row = mysqli_fetch_array($retval, MYSQLI_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";
    mysqli_close($conn);
    尝试一下
    将行的内容分配给变量$row,然后打印该行中的值。
    注意 -当您想将数组值(PHP变量)直接插入字符串中时,请始终记住使用大括号。
    在上面的示例中,常量MYSQLI_ASSOC用作PHP函数mysqli_fetch_array()的第二个参数,因此它将行作为关联数组返回。使用关联数组,您可以使用字段名称而不是使用索引来访问该字段。PHP提供了另一个名为mysqli_fetch_assoc()的函数,该函数还将行作为关联数组返回。
    :下面的示例使用mysqli_fetch_assoc()函数显示tutorial_tbl表中的所有记录。
    <?php
    $dbhost = 'localhost:3036';
    $dbuser = 'root';
    $dbpass = 'rootpassword';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    
    if(! $conn ) {
        die('Could not connect: ' . mysqli_error($conn));
    }
    
    $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
          FROM tutorials_tbl';
    
    mysqli_select_db($conn,'mydb');
    $retval = mysqli_query( $conn, $sql );
    
    if(! $retval ) {
        die('Could not get data: ' . mysqli_error($conn));
    }
    
    while($row = mysqli_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";
    mysqli_close($conn);
    尝试一下
    您还可以将常量MYSQLI_NUM用作PHP函数mysqli_fetch_array()的第二个参数。这将导致函数返回带有数字索引的数组。
    : 尝试以下示例使用MYSQL_NUM参数显示tutorials_tbl表中的所有记录。
    <?php
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = 'rootpassword';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    
    if(! $conn ) {
        die('Could not connect: ' . mysqli_error($conn));
    }
    
    $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
          FROM tutorials_tbl';
    
    mysqli_select_db($conn,'mydb');
    $retval = mysqli_query( $conn,$sql );
    
    if(! $retval ) {
        die('Could not get data: ' . mysqli_error($conn));
    }
    
    while($row = mysqli_fetch_array($retval, MYSQLI_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";
    mysqli_close($conn);
    ?>
    尝试一下
    以上三个示例都将产生相同的结果。
  • 释放内存

    在每个SELECT语句的末尾释放游标内存是一个好习惯。这可以通过使用PHP函数mysqli_free_result()来完成。以下程序是显示应如何使用的示例。
    尝试以下示例
    <?php
    $dbhost = 'localhost:3036';
    $dbuser = 'root';
    $dbpass = 'rootpassword';
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    
    if(! $conn ) {
        die('Could not connect: ' . mysqli_error($conn));
    }
    
    $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
          FROM tutorials_tbl';
    
    mysqli_select_db($conn ,'mydb');
    $retval = mysqli_query( $conn,$sql );
    
    if(! $retval ) {
        die('Could not get data: ' . mysqli_error($conn));
    }
    
    while($row = mysqli_fetch_array($retval, MYSQLI_NUM)) {
        echo "Tutorial ID :{$row[0]}  <br> ".
            "Title: {$row[1]} <br> ".
            "Author: {$row[2]} <br> ".
            "Submission Date : {$row[3]} <br> ".
            "--------------------------------<br>";
    }
    mysqli_free_result($retval);
    echo "Fetched data successfully\n";
    mysqli_close($conn);
    ?>
    尝试一下
    在获取数据时,您可以根据需要编写复杂的代码,但是该过程将保持与上述相同。