摘要:在本教程中,您将学习如何使用 PHP PDO 将数据插入 MySQL 表中。
我们将使用我们在PHP MySQL 创建表教程中创建的tasks
表。如果您尚未创建tasks
表,请按照教程创建任务表,然后再继续本教程。
下图展示了tasks
表:
要将数据插入表中,请按照以下步骤操作:
- 通过创建 PDO 对象的新实例连接到 MySQL 数据库。
- 构建MySQL INSERT 语句。
- 调用 PDO 对象的
exec()
方法。
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:使用准备好的语句插入单行示例
要将值从 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 向表中插入多行示例
有两种方法可以向表中插入多行:
- 多次执行
insertSingleRow()
方法。 - 构造一条插入多行的 MySQL
INSERT
语句并执行它。
下载
您可以通过以下链接下载本教程的源代码:
在本教程中,您学习了如何使用 PHP PDO 准备语句将数据插入 MySQL 表中。