答案:PHP通过PDO或MySQLi扩展连接数据库,需配置主机、用户名、密码等参数。推荐使用PDO,因其支持多种数据库、预处理防注入且代码更安全灵活。常见错误包括权限拒绝、连接超时、数据库不存在等,可通过try-catch捕获异常、检查服务状态与权限排查。敏感信息应通过环境变量管理,配置文件放Web目录外,启用SSL加密及错误日志保护数据安全。

PHP代码连接数据库,核心在于通过PHP内置的数据库扩展(比如PDO或MySQLi)建立一个与数据库服务器的通信通道。这需要提供数据库服务器的地址、端口、用户名、密码以及要连接的数据库名称等信息。一旦连接成功,我们就可以执行SQL查询语句,进行数据的增删改查操作了。这是一个程序与数据交互的基础,也是任何动态Web应用不可或缺的一环。
连接PHP与数据库,我通常会推荐使用PDO(PHP Data Objects),因为它提供了一个轻量级、一致的接口来访问多种数据库。以下是连接MySQL数据库并执行查询的基本步骤:
首先,定义你的数据库连接参数。把这些参数集中管理是个好习惯,避免硬编码散落在代码各处。
<?php
$host = 'localhost'; // 数据库主机地址
$db = 'your_database_name'; // 你的数据库名
$user = 'your_username'; // 数据库用户名
$pass = 'your_password'; // 数据库密码
$charset = 'utf8mb4'; // 字符集,推荐utf8mb4支持更广的字符
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 错误模式,抛出异常
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认获取关联数组
PDO::ATTR_EMULATE_PREPARES => false, // 关闭模拟预处理,使用数据库原生预处理
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "数据库连接成功!<br>";
// --- 执行查询示例 ---
// 1. SELECT 查询
$stmt = $pdo->query("SELECT id, name, email FROM users LIMIT 5");
$users = $stmt->fetchAll();
echo "<h3>用户列表:</h3>";
foreach ($users as $user) {
echo "ID: " . $user['id'] . ", 姓名: " . $user['name'] . ", 邮箱: " . $user['email'] . "<br>";
}
// 2. INSERT 插入 (使用预处理语句,防止SQL注入)
$name = "新用户";
$email = "newuser@example.com";
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->execute([$name, $email]);
echo "<br>成功插入新用户: " . $name . "<br>";
// 3. UPDATE 更新 (使用命名占位符)
$newEmail = "updated@example.com";
$userId = 1;
$stmt = $pdo->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute([':email' => $newEmail, ':id' => $userId]);
echo "成功更新用户ID " . $userId . " 的邮箱。<br>";
// 4. DELETE 删除
$userIdToDelete = 2;
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([$userIdToDelete]);
echo "成功删除用户ID " . $userIdToDelete . "。<br>";
} catch (PDOException $e) {
// 捕获PDO连接或查询过程中的异常
die("数据库连接失败或查询错误: " . $e->getMessage());
}
?>这段代码展示了如何建立连接,并用PDO的预处理语句执行了常见的增删改查操作。预处理语句是防止SQL注入的关键,它将SQL逻辑与数据分离,让数据库在执行前预编译SQL模板。
立即学习“PHP免费学习笔记(深入)”;
在PHP连接数据库的过程中,遇到错误是家常便饭,我几乎每次搭建新环境都会碰到点小麻烦。最常见的错误无非就是那么几种,但排查起来有时真的需要一点耐心和经验。
"Access denied for user 'xxx'@'localhost' (using password: YES/NO)": 这是最常见的身份验证失败。简单来说,就是你提供的用户名或密码不对,或者这个用户没有权限从你连接的主机(比如'localhost')访问数据库。我记得有次就因为数据库用户权限被不小心改了,结果代码没动,突然就连接不上了,排查了半天发现是数据库管理员的锅。排查时,首先确认
$user
$pass
localhost
"SQLSTATE[HY000] [2002] Connection refused" / "Can't connect to MySQL server on 'xxx' (111)": 这通常意味着PHP程序无法找到或连接到数据库服务器。可能的原因有:
$host
127.0.0.1
localhost
$dsn
mysql:host=localhost;port=3307;...
"Unknown database 'xxx'": 这个错误很直接,就是你
$db
字符集问题: 虽然不直接导致连接失败,但错误的字符集配置会导致乱码。例如,如果你的数据库是
utf8mb4
latin1
$charset
排查建议:
try-catch
try-catch
PDOException
display_errors=Off
php.ini
error_log
mysql -h localhost -u your_username -p
数据库连接配置包含敏感信息,比如用户名和密码,一旦泄露,后果不堪设想。我个人在处理这个问题时,最看重的就是“不把鸡蛋放在一个篮子里”,并且尽量让敏感信息远离Web根目录。
使用环境变量: 这是我最推荐的方式。将数据库连接参数(主机、用户、密码等)存储在服务器的环境变量中,而不是直接写在PHP代码或配置文件里。PHP可以通过
getenv()
SetEnv
php-fpm
env
.env
dotenv
vlucas/phpdotenv
配置文件置于Web根目录之外: 如果你选择使用配置文件(比如一个
config.php
/var/www/html
/var/www/config
数据库用户最小权限原则: 给数据库用户分配权限时,只授予其完成任务所需的最小权限。例如,如果某个应用只需要读取数据,就只给它
SELECT
INSERT
UPDATE
DELETE
禁用display_errors
php.ini
display_errors
Off
log_errors
On
使用SSL/TLS加密数据库连接: 如果你的PHP应用和数据库服务器不在同一台机器上,或者在不安全的网络环境中,强烈建议使用SSL/TLS加密数据库连接。这可以防止数据在传输过程中被窃听或篡改。PDO和MySQLi都支持SSL连接,你需要在连接参数中指定SSL证书路径。
定期审计和更新: 定期检查数据库用户的权限,删除不再需要的用户。保持PHP和数据库软件的最新版本,以修补已知的安全漏洞。
在PHP中,连接MySQL数据库主要有两种主流的扩展:PDO (PHP Data Objects) 和 MySQLi (MySQL Improved Extension)。我个人在新的项目里几乎都会选择PDO,但MySQLi在某些场景下也有它的优势。
PDO (PHP Data Objects)
PDOException
MySQLi (MySQL Improved Extension)
mysql_*
什么时候选择哪个?
选择PDO:
选择MySQLi:
mysql_*
总的来说,我个人是强烈推荐使用PDO的。它的灵活性、安全性以及对多种数据库的统一支持,让我在开发时能少操很多心,也为项目未来的发展留下了更多可能。除非有非常特殊的理由,否则PDO通常是更优的选择。
以上就是PHP代码怎么连接数据库_ PHP数据库连接配置与查询执行步骤的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号