PHP MySQL: Insert Data Into a Table

摘要在本教程中,您将学习如何使用 PHP PDO 将数据插入 MySQL 表中。

我们将使用我们在PHP MySQL 创建表教程中创建的tasks表。如果您尚未创建tasks表,请按照教程创建任务表,然后再继续本教程。

下图展示了tasks表:

任务表

要将数据插入表中,请按照以下步骤操作:

PHP MySQL 插入数据示例

PHP MySQL:将新行插入表示例

<?php

class InsertDataDemo {

    const DB_HOST = 'localhost';
    const DB_NAME = 'classicmodels';
    const DB_USER = 'root';
    const DB_PASSWORD = '';

    private $pdo = null;

    /**
     * Open the database connection
     */
    public function __construct() {
        // open database connection
        $conStr = sprintf("mysql:host=%s;dbname=%s", self::DB_HOST, self::DB_NAME);
        try {
            $this->pdo = new PDO($conStr, self::DB_USER, self::DB_PASSWORD);
        } catch (PDOException $pe) {
            die($pe->getMessage());
        }
    }
//...Code language: PHP (php)

以下示例说明如何将新行插入到tasks表中。

   /**
     * Insert a row into a table
     * @return
     */
    public function insert() {
        $sql = "INSERT INTO tasks (
                      subject,
                      description,
                      start_date,
                      end_date
                  )
                  VALUES (
                      'Learn PHP MySQL Insert Dat',
                      'PHP MySQL Insert data into a table',
                      '2013-01-01',
                      '2013-01-01'
                  )";

        return $this->pdo->exec($sql);
    }Code language: PHP (php)

我们定义了InsertDataDemo类,其中包含一个用于建立数据库连接的构造函数和一个用于关闭数据库连接的析构函数。这些方法的代码请参考PHP MySQL 创建表教程

InsertDataDemo类中,我们定义了一个insert方法,该方法调用PDO对象的exec()方法来执行INSERT语句。

以下语句创建InsertDataDemo类的实例并调用insert()方法以将新行插入到任务表中。

$obj = new InsertDataDemo();
$obj->insert();Code language: PHP (php)

我们来查询tasks表中的数据:

SELECT *
  FROM tasks;Code language: SQL (Structured Query Language) (sql)
PHP MySQL Insert Task Example

PHP MySQL:使用准备好的语句插入单行示例

要将值从 PHP 动态安全地传递到 SQL 语句,可以使用 PDO 准备语句。

首先,使用带有命名占位符的 MySQL 语句,如下所示:

$sql = 'INSERT INTO tasks (
                      subject,
                      description,
                      start_date,
                      end_date
                  )
                  VALUES (
                      :subject,
                      :description,
                      :start_date,
                      :end_date
                  );';Code language: PHP (php)

:subject、:description、:startdate 和 :enddate 称为命名占位符。

其次,调用PDO对象的prepare()方法来准备执行的SQL语句:

$q = $pdo->prepare($sql);Code language: PHP (php)

第三,调用execute()方法并传递一个数组,其中包含与指定占位符相对应的值。

$q->execute($task)Code language: PHP (php)

把它们放在一起。

   /**
     * Insert a new task into the tasks table
     * @param string $subject
     * @param string $description
     * @param string $startDate
     * @param string $endDate
     * @return mixed returns false on failure 
     */
    function insertSingleRow($subject, $description, $startDate, $endDate) {
        $task = array(':subject' => $subject,
            ':description' => $description,
            ':start_date' => $startDate,
            ':end_date' => $endDate);

        $sql = 'INSERT INTO tasks (
                      subject,
                      description,
                      start_date,
                      end_date
                  )
                  VALUES (
                      :subject,
                      :description,
                      :start_date,
                      :end_date
                  );';

        $q = $this->pdo->prepare($sql);

        return $q->execute($task);
    }Code language: PHP (php)

现在我们可以将任务的数据传递给insertSingleRow()方法:

$obj->insertSingleRow('MySQL PHP Insert Tutorial', 
                          'MySQL PHP Insert using prepared statement', 
                          '2013-01-01', 
                          '2013-01-02');Code language: PHP (php)

让我们检查一下tasks表:

PHP MySQL Insert Task Prepared Statement Example

PHP MySQL 向表中插入多行示例

有两种方法可以向表中插入多行:

  • 多次执行insertSingleRow()方法。
  • 构造一条插入多行的 MySQL INSERT语句并执行它。

下载

您可以通过以下链接下载本教程的源代码:

下载 PHP MySQL 插入源代码

在本教程中,您学习了如何使用 PHP PDO 准备语句将数据插入 MySQL 表中。

本教程有帮助吗?