之前系列中内容有介绍过 PDO 进行数据库查询并显示数据,这回将描述如何通过它向表中插入数据。
小实践
接下的内容都是建立在之前系列内容的代码基础上。
首先,在之前的数据库 mytodo
数据库下建立一张 users
表 ,结构如下:
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过数据库客户端(比如
Sequel Pro
)来创建表也会很方便。
接下来,我们需要调整 QueryBuilder.php
,会增加一些代码实现插入数据库相关的操作。
<?php
class QueryBuilder
{
protected $pdo;
public function __construct($pdo)
{
$this->pdo = $pdo;
}
public function selectAll($table)
{
$statement = $this->pdo->prepare("select * from {$table}");
$statement->execute();
return $statement->fetchAll(PDO::FETCH_CLASS);
}
public function insert($table, $parameters)
{
$sql = sprintf(
'insert into %s(%s) values(%s)',
$table,
implode(', ', array_keys($parameters)),
':' . implode(', :', array_keys($parameters))
);
try {
$statement = $this->pdo->prepare($sql);
$statement->execute($parameters);
} catch (Exception $e) {
die('Whoops, something went wrong.'.$e->getMessage());
}
}
}
这里新增了 insert
方法,该方法会拼接传入的表名以及列参数信息成 SQL 语句,通过 PDO 执行操作。
这里使用了 try...catch
代码块用于捕获数据库操作中存在的异常。
我们的提交表单的请求会执行到 controllers/add-name.php
中:
<?php
$app['database']->insert('users', [
'name' => $_POST['name']
]);
header('Location: /');
获取 POST 请求参数信息,向 users
表插入用户信息。
通过上面的操作,我们已经可以完成提交表单插入数据到数据表,接下来是读取这些数据显示在页面上。
首先,在 controllers/index.php
读取数据:
<?php
$users = $app['database']->selectAll('users');
require "views/index.view.php";
其次,在页面 views/index.view.php
上添加输出代码:
<?php require('partials/head.php'); ?>
<?php foreach ($users as $user) : ?>
<li><?= $user->name; ?></li>
<?php endforeach; ?>
<h1>Submit Your Name</h1>
<form action="/names" method="POST">
<input type="text" name="name">
<button type="Submit">Submit</button>
</form>
<?php require('partials/footer.php'); ?>
运行程序感受一下。