PHP 新手入門指南 - 通過 PDO 插入數(shù)據(jù)

之前系列中內(nèi)容有介紹過 PDO 進(jìn)行數(shù)據(jù)庫查詢并顯示數(shù)據(jù),這回將描述如何通過它向表中插入數(shù)據(jù)。

小實(shí)踐

接下的內(nèi)容都是建立在之前系列內(nèi)容的代碼基礎(chǔ)上。

首先,在之前的數(shù)據(jù)庫 mytodo 數(shù)據(jù)庫下建立一張 users 表 ,結(jié)構(gòu)如下:

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;

通過數(shù)據(jù)庫客戶端(比如 Sequel Pro )來創(chuàng)建表也會(huì)很方便。

接下來,我們需要調(diào)整 QueryBuilder.php,會(huì)增加一些代碼實(shí)現(xiàn)插入數(shù)據(jù)庫相關(guān)的操作。

<?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 方法,該方法會(huì)拼接傳入的表名以及列參數(shù)信息成 SQL 語句,通過 PDO 執(zhí)行操作。

這里使用了 try...catch 代碼塊用于捕獲數(shù)據(jù)庫操作中存在的異常。

我們的提交表單的請(qǐng)求會(huì)執(zhí)行到 controllers/add-name.php 中:

<?php

$app['database']->insert('users', [
    'name' => $_POST['name']
]);

header('Location: /');

獲取 POST 請(qǐng)求參數(shù)信息,向 users 表插入用戶信息。


通過上面的操作,我們已經(jīng)可以完成提交表單插入數(shù)據(jù)到數(shù)據(jù)表,接下來是讀取這些數(shù)據(jù)顯示在頁面上。

首先,在 controllers/index.php 讀取數(shù)據(jù):

<?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'); ?>

運(yùn)行程序感受一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息,讓PHP新手誤入歧途,傳播著錯(cuò)誤的實(shí)踐和糟糕的代碼,這必須得到糾正...
    layjoy閱讀 21,724評(píng)論 7 118
  • Php:腳本語言,網(wǎng)站建設(shè),服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語言,是一種簡單的、面向?qū)ο?..
    廖馬兒閱讀 2,197評(píng)論 2 38
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,245評(píng)論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,368評(píng)論 25 708
  • 一朵花,會(huì)枯萎; 一粒沙,會(huì)消失; 一顆星,會(huì)隕落; 一個(gè)人,會(huì)…… 離開!離開! ...
    暗香之渡閱讀 534評(píng)論 0 2