PHP 数据库操作实战:PostgreSQL 与 MongoDB

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP 数据库操作实战:PostgreSQL 与 MongoDB



现代 PHP Web 开发几乎离不开与数据库的交互。两种流行的解决方案——关系型数据库 PostgreSQL 和文档型数据库 MongoDB——为开发者提供了灵活的数据存储和处理工具。本文将介绍如何连接这两种数据库系统,执行基本的 CRUD 操作,并避免常见错误。所有代码示例均使用 PHP 编写,可直接使用。



通过 PDO 连接 PostgreSQL



在 PHP 中操作 PostgreSQL 时,推荐使用 PDO(PHP 数据对象)扩展。它为不同的数据库系统提供了统一的接口,并通过预处理语句防止 SQL 注入攻击。



请确保已安装 pdo_pgsql 驱动。可以通过 phpinfo() 或以下命令检查:



php -m | grep pdo_pgsql


连接本地数据库的示例:



<?php$host = 'localhost';$dbname = 'my_database';$user = 'postgres';$pass = 'secret';

try { $dsn = "pgsql:host=$host;dbname=$dbname"; $pdo = new PDO($dsn, $user, $pass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); echo "PostgreSQL 连接成功!";} catch (PDOException $e) { die("连接错误: " . $e->getMessage());}


连接成功后,我们来执行简单的数据查询。创建 users 表并插入几条记录:



<?php// 创建表$pdo->exec("CREATE TABLE IF NOT EXISTS users (    id SERIAL PRIMARY KEY,    name VARCHAR(100) NOT NULL,    email VARCHAR(255) UNIQUE NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");

// 通过预处理语句插入数据$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");$stmt->execute([':name' => '伊万·彼得罗夫', ':email' => 'ivan@example.com']);echo "用户已添加,ID: " . $pdo->lastInsertId();

// 查询所有用户$users = $pdo->query("SELECT * FROM users")->fetchAll();foreach ($users as $user) { echo "{$user['name']} - {$user['email']}<br>";}


通过官方驱动操作 MongoDB



MongoDB 是一种 NoSQL 数据库,以 BSON(二进制 JSON)格式存储数据。PHP 有官方驱动 mongodb,可通过 Composer 与 mongodb/mongodb 库一起安装。



安装命令:



composer require mongodb/mongodb


连接 MongoDB 并选择数据库:



<?phprequire 'vendor/autoload.php';

use MongoDB\\Client;

$uri = 'mongodb://localhost:27017';$client = new Client($uri);$collection = $client->my_database->users; // 数据库 my_database,集合 users

echo "MongoDB 连接成功";


现在执行 CRUD 操作。在 MongoDB 中,数据以关联数组的形式表示:



<?php// 插入文档$insertResult = $collection->insertOne([    'name' => '安娜·斯米尔诺娃',    'email' => 'anna@example.com',    'age' => 28,    'tags' => ['php', 'mongodb']]);echo "新文档 ID: " . $insertResult->getInsertedId();

// 按字段查找$user = $collection->findOne(['email' => 'anna@example.com']);echo "姓名: " . $user['name'];

// 更新:添加 "status" 字段$collection->updateOne( ['email' => 'anna@example.com'], ['$set' => ['status' => 'active']]);

// 删除$collection->deleteOne(['email' => 'anna@example.com']);


方案对比:何时选择 PostgreSQL,何时选择 MongoDB

博客

书籍推荐