引言:为什么PHP和数据库是强大的组合
\n\n任何现代网站或应用程序都不只是页面的集合,而是一个存储和处理数据的动态系统。PHP作为最流行的Web开发语言之一,提供了强大的数据库操作工具。本文将介绍两种关键的数据库管理系统(DBMS):关系型PostgreSQL和面向文档的MongoDB。
\n\n对于初学者来说,在两者之间做出选择可能看起来很困难,但实际上它们各自解决不同的问题。PostgreSQL是结构化数据的可靠SQL标准,而MongoDB是用于快速原型开发和处理类似JSON文档的灵活NoSQL系统。我们将展示如何从PHP连接到这两种数据库,执行基本操作(CRUD),并提供实用建议。
\n\n1. 环境准备:需要安装什么
\n\n在编写代码之前,请确保已安装所需的PHP扩展。操作PostgreSQL需要pdo_pgsql扩展,操作MongoDB需要mongodb扩展(通过PECL或composer安装)。
安装扩展
\n- \n
- PostgreSQL:在php.ini中取消注释
extension=pdo_pgsql这一行,或通过包管理器安装(例如sudo apt install php-pgsql)。 \n - MongoDB:使用Composer:
composer require mongodb/mongodb— 这将安装官方库。 \n
安装后,通过执行php -m | grep -i pgsql和php -m | grep -i mongodb检查扩展是否已激活。
2. PostgreSQL与PHP:可靠性与SQL
\n\nPostgreSQL是一个强大的关系型数据库管理系统,支持ACID事务、复杂查询和JSON字段。在PHP中操作它,最方便的方法是使用PDO(PHP数据对象)——一个通用接口。
\n\n连接到PostgreSQL
\n创建文件connect_pgsql.php:
<?php\n$host = 'localhost';\n$dbname = 'testdb';\n$user = 'postgres';\n$pass = 'password';\n\ntry {\n $pdo = new PDO("pgsql:host=$host;dbname=$dbname", $user, $pass);\n $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n echo "PostgreSQL连接成功!";\n} catch (PDOException $e) {\n die("连接错误:" . $e->getMessage());\n}\n?>\n\n以users表为例的CRUD操作
\n创建表并执行基本查询。
\n\n创建表
\n<?php\n$sql = "CREATE TABLE IF NOT EXISTS users (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100) NOT NULL,\n email VARCHAR(150) UNIQUE NOT NULL,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n)";\n$pdo->exec($sql);\necho "表已创建。";\n?>\n\n插入数据(CREATE)
\n<?php\n$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");\n$stmt->execute(['name' => '伊万·彼得罗夫', 'email' => 'ivan@example.com']);\necho "用户已添加。";\n?>\n\n读取数据(READ)
\n<?php\n$stmt = $pdo->query("SELECT * FROM users");\nwhile ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {\n echo "ID: {$row['id']}, 姓名: {$row['name']}, 邮箱: {$row['email']}<br>";\n}\n?>\n\n更新(UPDATE)和删除(DELETE)
\n<?php\n// 更新\n$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");\n$stmt->execute(['name' => '彼得·西多罗夫', 'id' => 1]);\n\n// 删除\n$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");\n$stmt->execute(['id' => 2]);\n?>\n\n提示:始终使用预处理语句(prepare)来防止SQL注入。
\n\n3. MongoDB与PHP:无模式的灵活性
\n\nMongoDB以BSON(二进制JSON)文档的形式存储数据。