MySQLi - 快速指南


MySQLi - 简介

MySQLi 是 PHP 中 MySQL API 的扩展,从 PHP 5.0 开始引入。它也被称为 MySQL 改进扩展。MySQLi 背后的动机是利用 MySQL 4.1.3 及以上版本中提供的新功能。与 MySQL 扩展相比,它提供了许多优势。

  • MySQL 提供了面向对象的接口。它提供了面向对象和过程的方法来处理数据库操作。

面向对象的接口

<?php
   $mysqli = mysqli_connect("localhost", "user", "password", "database-name");

   $result = mysqli_query($mysqli, "SELECT 'Welcome to MySQLi' AS _msg FROM DUAL");
   $row = mysqli_fetch_assoc($result);
   echo $row['_msg'];
?>

程序方法

<?php
   $mysqli = new mysqli("localhost", "user", "password", "database-name");

   $result = $mysqli→query("SELECT 'Welcome to MySQLi' AS _msg FROM DUAL");
   $row = $result→fetch_assoc();
   echo $row['_msg'];
?>
  • MySQLi 支持准备好的语句。

  • MySQLi 支持多条语句。

  • MySQLi 支持事务。

  • MySQLi 提供增强的调试功能。

MySQLi - PHP 语法

MySQL 可以很好地与 PERL、C、C++、JAVA 和 PHP 等各种编程语言结合使用。在这些语言中,PHP 因其 Web 应用程序开发功能而成为最受欢迎的语言。

本教程主要关注在 PHP 环境中使用 MySQL。如果您对带有 PERL 的 MySQL 感兴趣,那么您可以考虑阅读PERL教程。

PHP 提供了各种函数来访问 MySQL 数据库并操作 MySQL 数据库内的数据记录。您需要以与调用任何其他 PHP 函数相同的方式调用 PHP 函数。

与 MySQL 一起使用的 PHP 函数具有以下一般格式 -

mysqli function(value,value,...);

函数名称的第二部分是特定于函数的,通常是描述函数功能的单词。以下是我们将在教程中使用的两个函数 -

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
mysqli→query(,"SQL statement");

以下示例显示了 PHP 调用任何 MySQL 函数的通用语法。

<html>
   <head>
      <title>PHP with MySQL</title>
   </head>
   <body>
      <?php
         $retval = mysqli - > <i>function</i>(value, [value,...]);
         if( !$retval ) {
            die ( "Error: a related error message" );
         }
         // Otherwise MySQL  or PHP Statements
      ?>
   </body>
</html>

从下一章开始,我们将看到所有重要的 MySQL 功能以及 PHP。

MySQLi - 连接

使用 MySQL 二进制文件的 MySQL 连接

您可以在命令提示符下使用mysql二进制文件建立 MySQL 数据库。

例子

这是一个从命令提示符连接到 MySQL 服务器的简单示例 -

[root@host]# mysql -u root -p
Enter password:******

这将为您提供 mysqli 命令提示符,您可以在其中执行任何 SQL 命令。以下是上述命令的结果 -

以下代码块显示了上述代码的结果 -

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

在上面的示例中,我们使用root作为用户,但您也可以使用任何其他用户。任何用户都可以执行该用户允许的所有 SQL 操作。

您可以随时在 mysql> 提示符下使用exit命令断开与 MySQL 数据库的连接。

mysql> exit
Bye

使用 PHP 脚本连接 MySQL

PHP 提供mysqli结构或mysqli_connect()函数来打开数据库连接。该函数采用六个参数,成功时返回 MySQL 链接标识符,失败时返回 FALSE。

句法

$mysqli = new mysqli($host, $username, $passwd, $dbName, $port, $socket);

先生。 参数及说明
1

$主机

可选 - 运行数据库服务器的主机名。如果未指定,则默认值为localhost:3306

2

$用户名

可选 - 访问数据库的用户名。如果未指定,则默认值将是拥有服务器进程的用户的名称。

3

$密码

可选 - 访问数据库的用户的密码。如果未指定,则默认密码为空。

4

$数据库名称

可选 - 要执行查询的数据库名称。

5

$端口

可选 - 尝试连接到 MySQL 服务器的端口号。

6

$套接字

可选 - 应使用的套接字或命名管道。

您可以随时使用另一个 PHP 函数close()断开与 MySQL 数据库的连接。

句法

$mysqli→close();

例子

尝试以下示例来连接到 MySQL 服务器 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Connecting MySQL Server</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.

MySQLi - 创建数据库

使用 mysqladmin 创建数据库

您需要特殊权限才能创建或删除 MySQL 数据库。因此,假设您有权访问 root 用户,您可以使用 mysql mysqladmin二进制文件创建任何数据库。

例子

这是一个创建名为TUTORIALS 的数据库的简单示例-

[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******

这将创建一个名为 TUTORIALS 的 MySQL 数据库。

使用 PHP 脚本创建数据库

PHP 使用mysqli query()mysql_query()函数来创建或删除 MySQL 数据库。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于创建 MySQL 数据库的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来创建数据库 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head><title>Creating MySQL Database</title></head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');

         if ($mysqli→query("CREATE DATABASE TUTORIALS")) {
            printf("Database TUTORIALS created successfully.<br />");
         }
         if ($mysqli→errno) {
            printf("Could not create database: %s<br />", $mysqli→error);
         }

         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.
Database TUTORIALS created successfully.

MySQLi - 删除数据库

使用 mysqladmin 删除数据库

您需要特殊权限才能创建或删除 MySQL 数据库。因此,假设您有权访问 root 用户,您可以使用 mysql mysqladmin二进制文件创建任何数据库。

删除任何数据库时请务必小心,因为您将丢失数据库中的所有可用数据。

这是删除上一章中创建的数据库(TUTORIALS)的示例 -

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

这将向您发出警告,并确认您是否确实要删除该数据库。

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

使用 PHP 脚本删除数据库

PHP 使用mysqli query()mysql_query()函数来删除 MySQL 数据库。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于删除 MySQL 数据库的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来删除数据库 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head><title>Dropping MySQL Database</title></head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass);
         
         if($mysqli->connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli->connect_error);
            exit();
         }
         printf('Connected successfully.<br />');

         if ($mysqli->query("Drop DATABASE TUTORIALS")) {
            printf("Database TUTORIALS dropped successfully.<br />");
         }
         if ($mysqli->errno) {
            printf("Could not drop database: %s<br />", $mysqli->error);
         }
         $mysqli->close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.
Database TUTORIALS dropped successfully.

MySQLi - 选择数据库

连接到 MySQL 服务器后,需要选择要使用的数据库。这是因为 MySQL 服务器可能有多个可用的数据库。

从命令提示符中选择 MySQL 数据库

从 mysql> 提示符中选择数据库非常简单。您可以使用SQL 命令来选择数据库。

例子

这是选择名为TUTORIALS 的数据库的示例-

[root@host]# mysql -u root -p
Enter password:******
mysql> use TUTORIALS;
Database changed
mysql> 

现在,您已经选择了TUTORIALS数据库,后续的所有操作都将在TUTORIALS数据库上进行。

注意- 所有数据库名称、表名称、表字段名称均区分大小写。因此,在给出任何 SQL 命令时,您必须使用正确的名称。

使用 PHP 脚本选择 MySQL 数据库

PHP 使用mysqli_select_db函数来选择要执行查询的数据库。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

mysqli_select_db ( mysqli $link , string $dbname ) : bool

先生。 参数及说明
1

$链接

必需 - 由 mysqli_connect() 或 mysqli_init() 返回的链接标识符。

2

$数据库名称

必需 - 要连接的数据库的名称。

例子

尝试以下示例来选择数据库 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Selecting MySQL Database</title>
   </head>
   <body>
   <?php
      $dbhost = 'localhost';
      $dbuser = 'root';
      $dbpass = 'root@123';
      $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

      if(! $conn ) {
         die('Could not connect: ' . mysqli_error($conn));
      }
      echo 'Connected successfully<br />';
      
      $retval = mysqli_select_db( $conn, 'TUTORIALS' );

      if(! $retval ) {
         die('Could not select database: ' . mysqli_error($conn));
      }
      echo "Database TUTORIALS selected successfully\n";
      mysqli_close($conn);
   ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Database TUTORIALS selected successfully

MySQLi - 创建表

首先,表创建命令需要以下详细信息 -

  • 表名
  • 字段名称
  • 每个字段的定义

句法

以下是创建 MySQL 表的通用 SQL 语法 -

CREATE TABLE table_name (column_name column_type);

现在,我们将在TUTORIALS数据库中创建下表。

create table tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
);

在这里,有几项需要解释 -

  • 使用字段属性NOT NULL是因为我们不希望该字段为 NULL。因此,如果用户尝试创建具有 NULL 值的记录,那么 MySQL 将引发错误。

  • 字段属性AUTO_INCRMENT告诉 MySQL 继续将下一个可用数字添加到 id 字段。

  • 关键字PRIMARY KEY用于将列定义为主键。您可以使用以逗号分隔的多个列来定义主键。

从命令提示符创建表

通过 mysql> 提示符可以轻松创建 MySQL 表。您将使用 SQL 命令CREATE TABLE来创建表。

例子

这是一个示例,它将创建tutorials_tbl -

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
   → tutorial_id INT NOT NULL AUTO_INCREMENT,
   → tutorial_title VARCHAR(100) NOT NULL,
   → tutorial_author VARCHAR(40) NOT NULL,
   → submission_date DATE,
   → PRIMARY KEY ( tutorial_id )
   → );
Query OK, 0 rows affected (0.16 sec)
mysql>

注意- MySQL 不会终止命令,除非您在 SQL 命令末尾给出分号 (;)。

使用 PHP 脚本创建表

PHP 使用mysqli query()mysql_query()函数创建 MySQL 表。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于创建 MySQL 表的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来创建一个表 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Creating MySQL Table</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         $sql = "CREATE TABLE tutorials_tbl( ".
            "tutorial_id INT NOT NULL AUTO_INCREMENT, ".
            "tutorial_title VARCHAR(100) NOT NULL, ".
            "tutorial_author VARCHAR(40) NOT NULL, ".
            "submission_date DATE, ".
            "PRIMARY KEY ( tutorial_id )); ";
         if ($mysqli→query($sql)) {
            printf("Table tutorials_tbl created successfully.<br />");
         }
         if ($mysqli→errno) {
            printf("Could not create table: %s<br />", $mysqli→error);
         }
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.
Table tutorials_tbl created successfully.

MySQLi - 删除表

删除现有的 MySQL 表非常容易,但删除任何现有表时需要非常小心,因为删除表后丢失的数据将无法恢复。

句法

下面是删除 MySQL 表的通用 SQL 语法 -

DROP TABLE table_name ;

从命令提示符删除表

要从命令提示符删除表,我们需要在 mysql> 提示符下执行 DROP TABLE SQL 命令。

例子

以下程序是删除tutorials_tbl的示例-

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

使用 PHP 脚本删除表

PHP 使用mysqli query()mysql_query()函数删除 MySQL 表。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于删除表的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来删除表 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Dropping MySQL Table</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
		 
         if ($mysqli→query("Drop Table tutorials_tbl")) {
            printf("Table tutorials_tbl dropped successfully.<br />");
         }
         if ($mysqli→errno) {
            printf("Could not drop table: %s<br />", $mysqli→error);
         }
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.
Table tutorials_tbl dropped successfully.

MySQLi - 插入查询

要将数据插入 MySQL 表,您需要使用 SQL INSERT INTO命令。您可以使用 mysql> 提示符或使用任何脚本(例如 PHP)将数据插入 MySQL 表中。

句法

以下是 INSERT INTO 命令的通用 SQL 语法,用于将数据插入 MySQL 表 -

INSERT INTO table_name ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

要插入字符串数据类型,需要将所有值保留在双引号或单引号中。例如“值”

从命令提示符插入数据

要从命令提示符插入数据,我们将使用 SQL INSERT INTO 命令将数据插入 MySQL 表tutorials_tbl。

例子

以下示例将在tutorials_tbl表中创建3条记录 -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_tbl 
   →(tutorial_title, tutorial_author, submission_date)
   →VALUES
   →("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   →(tutorial_title, tutorial_author, submission_date)
   →VALUES
   →("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   →(tutorial_title, tutorial_author, submission_date)
   →VALUES
   →("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>

注意- 请注意所有箭头符号 (→) 并不是 SQL 命令的一部分。它们指示新行,并且由 MySQL 提示符自动创建,同时按 Enter 键,而不在命令的每行末尾给出分号。

在上面的示例中,我们没有提供tutorial_id,因为在创建表时,我们已经为此字段指定了AUTO_INCRMENT选项。因此 MySQL 会自动插入这些 ID。这里,NOW()是一个MySQL函数,它返回当前日期和时间。

使用 PHP 脚本插入数据

PHP 使用mysqli query()mysql_query()函数将记录插入 MySQL 表中。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于将记录插入表中的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

此示例将从用户处获取三个参数并将它们插入到 MySQL 表中 - -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Add New Record in MySQL Database</title>
   </head>
   <body>
      <?php
         if(isset($_POST['add'])) {
            $dbhost = 'localhost';
            $dbuser = 'root';
            $dbpass = 'root@123';
            $dbname = 'TUTORIALS';
            $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
            if($mysqli→connect_errno ) {
               printf("Connect failed: %s<br />", $mysqli→connect_error);
               exit();
            }
            printf('Connected successfully.<br />');

            if(! get_magic_quotes_gpc() ) {
               $tutorial_title = addslashes ($_POST['tutorial_title']);
               $tutorial_author = addslashes ($_POST['tutorial_author']);
            } else {
               $tutorial_title = $_POST['tutorial_title'];
               $tutorial_author = $_POST['tutorial_author'];
            }
            $submission_date = $_POST['submission_date'];
            $sql = "INSERT INTO tutorials_tbl ".
               "(tutorial_title,tutorial_author, submission_date) "."VALUES ".
               "('$tutorial_title','$tutorial_author','$submission_date')";
           
            if ($mysqli→query($sql)) {
               printf("Record inserted successfully.<br />");
            }
            if ($mysqli→errno) {
               printf("Could not insert record into table: %s<br />", $mysqli→error);
            }
            $mysqli→close();
         } else {
      ?>  
      <form method = "post" action = "<?php $_PHP_SELF ?>">
         <table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
            <tr>
               <td width = "250">Tutorial Title</td>
               <td><input name = "tutorial_title" type = "text" id = "tutorial_title"></td>
            </tr>         
            <tr>
               <td width = "250">Tutorial Author</td>
               <td><input name = "tutorial_author" type = "text" id = "tutorial_author"></td>
            </tr>         
            <tr>
               <td width = "250">Submission Date [   yyyy-mm-dd ]</td>
               <td><input name = "submission_date" type = "text" id = "submission_date"></td>
            </tr>      
            <tr>
               <td width = "250"> </td>
               <td></td>
            </tr>         
            <tr>
               <td width = "250"> </td>
               <td><input name = "add" type = "submit" id = "add"  value = "Add Tutorial"></td>
            </tr>
         </table>
      </form>
   <?php
      }
   ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php,输入详细信息并验证提交表单时的输出。

Record inserted successfully.

在进行数据插入时,最好使用函数get_magic_quotes_gpc()来检查当前的 magic quote 配置是否已设置。如果此函数返回 false,则使用函数addslashes()在引号前添加斜杠。

您可以进行许多验证来检查输入的数据是否正确,并可以采取适当的操作。

MySQLi - 选择查询

SQL SELECT命令用于从 MySQL 数据库获取数据。您可以在 mysql> 提示符以及任何脚本(如 PHP)中使用此命令。

句法

以下是从 MySQL 表中获取数据的 SELECT 命令的通用 SQL 语法 -

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 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>

使用 PHP 脚本获取数据

PHP 使用mysqli query()mysql_query()函数从 MySQL 表中选择记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于从 MySQL 表中选择记录的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例从表中选择一条记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Creating MySQL Table</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         $sql = "SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl";
		 
         $result = $mysqli->query($sql);
           
         if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。在这里,我们在运行选择脚本之前在表中输入了多条记录。

Connected successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021
Id: 4, Title: Java Tutorial, Author: Mahesh, Date: 2021
Id: 5, Title: Apache Tutorial, Author: Suresh, Date: 2021

MySQLi - WHERE 子句

我们已经看到了从 MySQL 表中获取数据的SQL SELECT命令。我们可以使用称为WHERE 子句的条件子句来过滤结果。使用此 WHERE 子句,我们可以指定选择标准以从表中选择所需的记录。

句法

以下代码块具有 SELECT 命令的通用 SQL 语法,带有 WHERE 子句,用于从 MySQL 表中获取数据 -

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 您可以使用一个或多个由逗号分隔的表来包含使用 WHERE 子句的各种条件,但 WHERE 子句是 SELECT 命令的可选部分。

  • 您可以使用 WHERE 子句指定任何条件。

  • 您可以使用ANDOR运算符指定多个条件。

  • WHERE 子句还可以与 DELETE 或 UPDATE SQL 命令一起使用来指定条件。

WHERE子句的工作方式类似于任何编程语言中的if 条件。该子句用于将给定值与 MySQL 表中可用的字段值进行比较。如果外部给定的值等于 MySQL 表中的可用字段值,则返回该行。

以下是可与WHERE子句一起使用的运算符列表。

假设字段 A 包含 10,字段 B 包含 20,则 -

操作员 描述 例子
= 检查两个操作数的值是否相等,如果相等,则条件成立。 (A = B) 不正确。
!= 检查两个操作数的值是否相等,如果不相等则条件成立。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (A > B) 不正确。
< 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (A >= B) 不正确。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (A <= B) 为真。

当您想要从表中获取选定的行时,特别是当您使用MySQL Join时,WHERE 子句非常有用。连接将在另一章中讨论。

使用主键搜索记录是一种常见的做法,可以使搜索速度更快。

如果给定条件与表中的任何记录都不匹配,则查询将不会返回任何行。

从命令提示符获取数据

这将使用带有 WHERE 子句的 SQL SELECT 命令从 MySQL 表tutorials_tbl中获取所选数据。

例子

以下示例将返回tutorials_tbl表中作者姓名为Sanjay的所有记录。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-21   |      
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

除非对字符串执行LIKE比较,否则比较不区分大小写。您可以使用BINARY关键字使搜索区分大小写,如下所示 -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
   WHERE BINARY tutorial_author = 'sanjay';
Empty set (0.02 sec)

mysql>

使用 PHP 脚本获取数据

PHP 使用mysqli query()mysql_query()函数通过 where 子句选择 MySQL 表中的记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 使用Where子句在MySQL表中选择记录的SQL查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例,使用表中的 where 子句选择记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Using Where Clause</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl where tutorial_author = "Mahesh"';
		 
         $result = $mysqli→query($sql);
           
         if ($result→num_rows > 0) {
            while($row = $result→fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。在这里,我们在运行选择脚本之前在表中输入了多条记录。

Connected successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021

MySQLi - 更新查询

可能存在需要修改 MySQL 表中现有数据的需求。您可以使用 SQL UPDATE命令来执行此操作。这将修改任何 MySQL 表的任何字段值。

句法

以下代码块具有 UPDATE 命令的通用 SQL 语法,用于修改 MySQL 表中的数据 -

UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
  • 您可以更新一个或多个字段。
  • 您可以使用 WHERE 子句指定任何条件。
  • 您一次可以更新一个表中的值。

当您想要更新表中选定的行时,WHERE 子句非常有用。

从命令提示符更新数据

这将使用带有 WHERE 子句的 SQL UPDATE 命令来更新 MySQL 表tutorials_tbl中的选定数据。

例子

以下示例将更新tutorial_id 为3 的记录的tutorial_title字段。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_tbl 
   → SET tutorial_title = 'Learning JAVA' 
   → WHERE tutorial_id = 3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

使用 PHP 脚本更新数据

PHP 使用mysqli query()mysql_query()函数来更新 MySQL 表中的记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于更新 MySQL 表中记录的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来更新表中的记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Updating MySQL Table</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
		 
         if ($mysqli→query('UPDATE tutorials_tbl set tutorial_title = "Learning Java" where tutorial_id = 4')) {
            printf("Table tutorials_tbl updated successfully.<br />");
         }
         if ($mysqli→errno) {
            printf("Could not update table: %s<br />", $mysqli→error);
         }
         $sql = "SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl";
		 
         $result = $mysqli→query($sql);
           
         if ($result→num_rows > 0) {
            while($row = $result→fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。在这里,我们在运行选择脚本之前在表中输入了多条记录。

Connected successfully.
Table tutorials_tbl updated successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021
Id: 4, Title: Learning Java, Author: Mahesh, Date: 2021
Id: 5, Title: Apache Tutorial, Author: Suresh, Date: 2021

MySQLi - 删除查询

如果你想从任何 MySQL 表中删除一条记录,那么你可以使用 SQL 命令DELETE FROM。您可以在 mysql> 提示符以及任何脚本(如 PHP)中使用此命令。

句法

以下代码块具有 DELETE 命令的通用 SQL 语法,用于从 MySQL 表中删除数据。

DELETE FROM table_name [WHERE Clause]
  • 如果未指定 WHERE 子句,则将从给定 MySQL 表中删除所有记录。

  • 您可以使用 WHERE 子句指定任何条件。

  • 您一次可以删除单个表中的记录。

当您想要删除表中选定的行时,WHERE 子句非常有用。

从命令提示符删除数据

这将使用带有 WHERE 子句的 SQL DELETE 命令将选定的数据删除到 MySQL 表 –tutorials_tbl

例子

以下示例将从tutorial_tbl中删除tutorial_id为3的记录。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_tbl WHERE tutorial_id=3;
Query OK, 1 row affected (0.23 sec)

mysql>

使用 PHP 脚本删除数据

PHP 使用mysqli query()mysql_query()函数删除 MySQL 表中的记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于删除 MySQL 表中记录的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例来删除表中的记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Deleting MySQL Table record</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
		 
         if ($mysqli→query('DELETE FROM tutorials_tbl where tutorial_id = 4')) {
            printf("Table tutorials_tbl record deleted successfully.<br />");
         }
         if ($mysqli→errno) {
            printf("Could not delete record from table: %s<br />", $mysqli→error);
         }
   
         $sql = "SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl";
		 
         $result = $mysqli→query($sql);
           
         if ($result→num_rows > 0) {
            while($row = $result→fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。在这里,我们在运行选择脚本之前在表中输入了多条记录。

Connected successfully.
Table tutorials_tbl record deleted successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021
Id: 5, Title: Apache Tutorial, Author: Suresh, Date: 2021

MySQLi - Like 子句

我们已经看到了从 MySQL 表中获取数据的SQL SELECT命令。我们还可以使用称为WHERE子句的条件子句来选择所需的记录。

当我们想要进行精确匹配时,带有“等于”符号 (=) 的 WHERE 子句可以很好地工作。就像“tutorial_author = 'Sanjay'”一样。但可能有一个要求,我们想要过滤掉所有tutorial_author名称应包含“jay”的结果。这可以使用SQL LIKE 子句和 WHERE 子句来处理。

如果 SQL LIKE 子句与 % 字符一起使用,那么它将像 UNIX 中的元字符 (*) 一样工作,同时在命令提示符下列出所有文件或目录。如果没有 % 字符,LIKE 子句与等号和 WHERE 子句非常相同。

句法

以下代码块具有 SELECT 命令的通用 SQL 语法以及 LIKE 子句,用于从 MySQL 表中获取数据。

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • 您可以使用 WHERE 子句指定任何条件。

  • 您可以将 LIKE 子句与 WHERE 子句一起使用。

  • 您可以使用 LIKE 子句代替等号

  • 当 LIKE 与 % 符号一起使用时,它将像元字符搜索一样工作。

  • 您可以使用ANDOR运算符指定多个条件。

  • WHERE...LIKE 子句还可以与 DELETE 或 UPDATE SQL 命令一起使用来指定条件。

在命令提示符下使用 LIKE 子句

这将使用带有 WHERE...LIKE 子句的 SQL SELECT 命令从 MySQL 表tutorials_tbl中获取选定的数据。

例子

以下示例将返回tutorials_tbl表中作者姓名以jay结尾的所有记录-

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
   → WHERE tutorial_author LIKE '%jay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      3      |  JAVA Tutorial |     Sanjay      |    2007-05-21   |   
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

在 PHP 脚本中使用 LIKE 子句

PHP 使用mysqli query()mysql_query()函数通过 Like 子句选择 MySQL 表中的记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 使用 Like 子句在 MySQL 表中选择记录的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例,在表中使用 like 子句选择记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Using Like Clause</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl where tutorial_author like "Mah%"';
		 
         $result = $mysqli→query($sql);
           
         if ($result→num_rows > 0) {
            while($row = $result→fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。在这里,我们在运行选择脚本之前在表中输入了多条记录。

Connected successfully.
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021

MySQLi - 对结果进行排序

我们已经看到了从 MySQL 表中获取数据的SQL SELECT命令。当您选择行时,MySQL 服务器可以自由地以任何顺序返回它们,除非您通过说明如何对结果进行排序来指示它。但是,您可以通过添加一个ORDER BY子句来对结果集进行排序,该子句命名要排序的一个或多个列。

句法

以下代码块是 SELECT 命令的通用 SQL 语法以及 ORDER BY 子句,用于对 MySQL 表中的数据进行排序。

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • 您可以对任何字段的返回结果进行排序(如果该字段已列出)。

  • 您可以对多个字段的结果进行排序。

  • 您可以使用关键字 ASC 或 DESC 来按升序或降序排列结果。默认情况下,它是升序。

  • 您可以按照通常的方式使用 WHERE...LIKE 子句来设置条件。

在命令提示符下使用 ORDER BY 子句

这将使用带有ORDER BY子句的 SQL SELECT 命令从 MySQL 表tutorials_tbl中获取数据。

例子

尝试以下示例,该示例按升序返回结果。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      2      |  Learn MySQL   |     Abdul S     |    2007-05-24   |   
|      1      |   Learn PHP    |    John Poul    |    2007-05-24   |   
|      3      | JAVA Tutorial  |     Sanjay      |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.42 sec)

mysql>

验证按升序列出的所有作者姓名。

在 PHP 脚本中使用 ORDER BY 子句

PHP 使用mysqli query()mysql_query()函数从 MySQL 表中获取排序记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

$mysqli→query($sql,$resultmode)

先生。 参数及说明
1

$sql

必需 - 用于从表中获取排序记录的 SQL 查询。

2

$结果模式

可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。

例子

尝试以下示例从表中获取排序记录 -

将以下示例复制并粘贴为 mysql_example.php -

<html>
   <head>
      <title>Sorting MySQL Table records</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost';
         $dbuser = 'root';
         $dbpass = 'root@123';
         $dbname = 'TUTORIALS';
         $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
         
         if($mysqli→connect_errno ) {
            printf("Connect failed: %s<br />", $mysqli→connect_error);
            exit();
         }
         printf('Connected successfully.<br />');
   
         $sql = "SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl order by tutorial_title asc";
         $result = $mysqli→query($sql);
           
         if ($result→num_rows > 0) {
            while($row = $result→fetch_assoc()) {
               printf("Id: %s, Title: %s, Author: %s, Date: %d <br />", 
                  $row["tutorial_id"], 
                  $row["tutorial_title"], 
                  $row["tutorial_author"],
                  $row["submission_date"]);               
            }
         } else {
            printf('No record found.<br />');
         }
         mysqli_free_result($result);
         $mysqli→close();
      ?>
   </body>
</html>

输出

访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。

Connected successfully.
Id: 5, Title: Apache Tutorial, Author: Suresh, Date: 2021
Id: 2, Title: HTML Tutorial, Author: Mahesh, Date: 2021
Id: 1, Title: MySQL Tutorial, Author: Mahesh, Date: 2021
Id: 3, Title: PHP Tutorial, Author: Mahesh, Date: 2021

MySQLi - 使用连接

在前面的章节中,我们一次从一个表中获取数据。这对于简单的任务来说已经足够了,但在大多数现实世界的 MySQL 使用中,您经常需要在单个查询中从多个表中获取数据。