PHP数据库操作:PostgreSQL与MongoDB

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

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

开始课程

在PHP中处理数据库:PostgreSQL和MongoDB



现代PHP Web开发很少不涉及数据库交互。选择关系型(PostgreSQL)还是文档型(MongoDB)系统取决于数据结构、性能要求和项目的可扩展性需求。在本文中,我们将介绍如何连接到这两种DBMS、执行基本操作以及选择时需要注意的事项。



1. 通过PDO连接到PostgreSQL



PostgreSQL是一种强大的关系型DBMS,支持ACID事务、复杂查询和可扩展数据类型。在PHP中,建议使用PDO(PHP Data Objects)扩展来操作它,该扩展为不同数据库提供了统一接口。



首先,请确保您的系统已安装pdo_pgsql和pgsql驱动程序。您可以通过phpinfo()进行检查。



连接和插入数据示例



<?php$host = 'localhost';$dbname = 'my_database';$user = 'my_user';$password = 'my_password';

try { // 创建DSN(数据源名称) $dsn = "pgsql:host=$host;dbname=$dbname"; // 连接 $pdo = new PDO($dsn, $user, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); echo "成功连接到PostgreSQL!<br>"; // 使用预处理语句插入数据 $sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)"; $stmt = $pdo->prepare($sql); $stmt->execute([ ':name' => '伊万·彼得罗夫', ':email' => 'ivan@example.com', ':age' => 28 ]); echo "用户已添加。ID: " . $pdo->lastInsertId(); } catch (PDOException $e) { echo "连接错误: " . $e->getMessage(); die();}?>


使用预处理语句(prepared statements)可以防止SQL注入,并在多次执行类似查询时提高性能。



带过滤条件的数据查询



<?php$minAge = 25;$search = "SELECT id, name, email, age FROM users WHERE age > :minAge ORDER BY age DESC";$stmt = $pdo->prepare($search);$stmt->execute([':minAge' => $minAge]);

$users = $stmt->fetchAll();

foreach ($users as $user) { echo "{$user['name']} ({$user['age']}岁) - {$user['email']}<br>";}?>


PostgreSQL支持复杂的JOIN、子查询、窗口函数和全文搜索——这使其成为对数据完整性有严格要求的项目的理想选择。



2. 通过官方驱动程序连接到MongoDB



MongoDB是一种NoSQL数据库,以文档形式(类似JSON的BSON对象)存储数据。它非常适合具有灵活模式、快速原型设计和水平扩展的项目。



要在PHP中使用MongoDB,需要安装mongodb扩展和mongodb/mongodb库(通过Composer安装)。



安装驱动程序



# 在项目根目录通过Composer安装composer require mongodb/mongodb


连接和插入文档示例



<?phprequire_once 'vendor/autoload.php';

use MongoDB\\Client;use MongoDB\\Driver\\Exception\\Exception;

try { // 连接到本地服务器 $client = new Client("mongodb://localhost:27017"); // 选择数据库和集合 $collection = $client->my_database->users; // 插入单个文档 $insertResult = $collection->insertOne([ 'name' => '安娜·斯米尔诺娃', 'email' => 'anna@example.com', 'age' => 32, 'interests' => ['编程', '阅读', '旅行'],

博客

书籍推荐