mysqli
或PDO
扩展,使用mysqli
:先创建连接对象`$conn = new mysqli($servername, $username, $password, $dbname);PHP连接数据库的详细方法及要点
在PHP开发中,连接数据库是实现数据存储、查询和操作的基础步骤,以下是关于PHP如何连接数据库的详细说明,涵盖常用方法、配置要点及最佳实践。
PHP连接数据库的两种主流方式
方式 | PDO(推荐) | MySQLi |
---|---|---|
适用场景 | 支持多种数据库(如MySQL、PostgreSQL、SQLite) | 仅适用于MySQL |
特性 | 统一接口、预处理语句、异常处理 | 面向对象/过程、事务支持、预处理语句 |
扩展依赖 | 需启用pdo_mysql 扩展 |
需启用mysqli 扩展 |
使用PDO连接数据库
-
安装与配置PDO扩展
- 编辑
php.ini
文件,取消注释:extension=pdo_mysql
- 重启Web服务器使配置生效。
- 编辑
-
连接参数配置
$host = 'localhost'; // 数据库服务器地址 $dbname = 'testdb'; // 数据库名 $user = 'root'; // 用户名 $pass = 'password'; // 密码 $charset = 'utf8mb4'; // 字符集
-
建立连接
$dsn = "mysql:host=$host;dbname=$dbname;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 "PDO连接成功"; } catch (PDOException $e) { die("连接失败: " . $e->getMessage()); }
-
执行操作示例
// 查询数据 $stmt = $pdo->query('SELECT FROM users'); foreach ($stmt as $row) { echo $row['name'] . "n"; } // 插入数据(预处理) $sql = "INSERT INTO users (name, age) VALUES (?, ?)"; $pdo->prepare($sql)->execute(['John Doe', 30]);
使用MySQLi连接数据库
-
安装与配置MySQLi扩展
- 编辑
php.ini
文件,取消注释:extension=mysqli
- 编辑
-
连接参数配置
$servername = 'localhost'; $username = 'root'; $password = 'password'; $dbname = 'testdb';
-
建立连接(面向对象风格)
$mysqli = new mysqli($servername, $username, $password, $dbname); if ($mysqli->connect_error) { die('连接失败: ' . $mysqli->connect_error); } echo "MySQLi连接成功";
-
执行操作示例
// 查询数据 $result = $mysqli->query("SELECT FROM users"); while ($row = $result->fetch_assoc()) { echo $row['name'] . "n"; } // 关闭连接 $mysqli->close();
安全与最佳实践
-
配置文件分离
- 将敏感信息存储在独立文件(如
config.php
):return [ 'host' => 'localhost', 'db' => 'testdb', 'user' => 'root', 'pass' => 'password', 'charset' => 'utf8mb4' ];
- 主程序加载配置:
$config = include 'config.php'; $pdo = new PDO("mysql:host={$config['host']};dbname={$config['db']}", $config['user'], $config['pass']);
- 将敏感信息存储在独立文件(如
-
防止SQL注入
- 使用预处理语句绑定参数:
// PDO示例 $stmt = $pdo->prepare('SELECT FROM users WHERE email = ?'); $stmt->execute([$email]);
- 使用预处理语句绑定参数:
-
错误处理
- PDO通过
try-catch
捕获异常:try { $pdo = new PDO(...); } catch (PDOException $e) { error_log($e->getMessage()); // 记录日志 die('数据库连接失败'); // 用户友好提示 }
- MySQLi检查返回值或异常:
if (!$conn) { die('连接错误: ' . mysqli_connect_error()); }
- PDO通过
-
字符集设置
- 在连接时指定字符集(如
utf8mb4
),避免中文乱码。
- 在连接时指定字符集(如
常见问题与解决方案
问题 | 解决方案 |
---|---|
连接失败 | 检查MySQL服务是否启动,确认主机名、端口、用户名和密码正确。 |
乱码问题 | 确保连接时设置正确的字符集(如utf8mb4 )。 |
权限不足 | 检查数据库用户是否拥有访问权限,远程连接需授权。 |
FAQs
如何选择PDO和MySQLi?
- 如果需要支持多种数据库(如MySQL、PostgreSQL),优先选择PDO;
- 如果仅针对MySQL且需要更细粒度的控制(如特定函数),可选MySQLi。
如何避免数据库凭据泄露?
- 将敏感信息存储在独立配置文件中,并设置文件权限(如
chmod 600 config.php
);
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/64987.html