当前位置:首页 > 数据库 > 正文

php连接 数据库的代码怎么写

mysqli扩展:`$conn=new mysqli(‘主机’,’用户’,’密码’,’数据库

是关于PHP连接数据库的详细指南,涵盖两种主流方法(MySQLi扩展和PDO),包含具体实现步骤、代码示例及注意事项:


准备工作

在开始编码前,需确认以下环境配置已完成:

  1. Web服务器支持PHP(如Apache/Nginx);
  2. 已安装目标数据库系统(以MySQL为例);
  3. 创建好指定的数据库和用户账号,并为其分配权限;
  4. PHP环境中启用了对应扩展(mysqlipdo_mysql),可通过phpinfo()函数查看是否加载成功。

使用MySQLi扩展实现连接

特点

面向过程风格,适合快速开发简单应用;支持预处理语句防止SQL注入。

php连接 数据库的代码怎么写  第1张

核心函数

mysqli_connect()用于建立连接,参数依次为:主机名、用户名、密码、数据库名(可选),若省略最后一个参数,则需后续用select_db切换库。

示例代码

<?php
// 定义数据库配置信息
$servername = "localhost"; // 通常本地部署为localhost或127.0.0.1
$username = "root";        // 替换为你的实际用户名
$password = "your_secure_password"; // 建议使用复杂密码并妥善保管
$dbname = "test_db";       // 预先创建的目标数据库名称
// 尝试建立连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error); // 输出错误详情便于调试
} else {
    echo "成功连接到MySQL数据库!";
    / 在这里执行SQL操作,例如查询数据 /
    $sql = "SELECT  FROM users";
    $result = $conn->query($sql);
    while ($row = $result->fetch_assoc()) {
        print_r($row); // 逐行打印结果集内容
    }
    $conn->close(); // 显式关闭连接释放资源
}
?>

️ 注意事项

  • 错误处理必须到位,避免直接暴露敏感信息;生产环境建议记录日志而非页面显示。
  • 字符集设置很重要,中文项目常添加:$conn->set_charset("utf8mb4");以支持表情符号等特殊字符。
  • 安全性提升应优先使用预处理语句替代普通查询,
     $stmt = $conn->prepare("INSERT INTO articles (title) VALUES(?)");
     $stmt->bind_param("s", $title); // 's'表示字符串类型参数
     $stmt->execute();

使用PDO实现更灵活的连接

️ 优势

统一接口适配多种数据库厂商(不限于MySQL),支持尝试事务原子性操作及更高级的功能。

php连接 数据库的代码怎么写  第2张

标准流程

通过DSN字符串指定驱动类型与连接参数,结合工厂模式创建实例,推荐用于中大型项目或需要多数据库兼容的场景。

完整示例

<?php
try {
    // DSN格式:驱动名称+冒号开头,后跟键值对结构的数据源标识符
    $dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8mb4';
    $options = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 开启异常抛出模式方便捕获错误
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC // 默认关联数组形式返回结果
    ];
    // 实例化PDO对象并传入配置数组
    $pdo = new PDO($dsn, 'root', 'your_secure_password', $options);
    // 测试基础交互功能
    $stmt = $pdo->query("SELECT  FROM products WHERE price > ?");
    $stmt->bindValue(1, 100, PDO::PARAM_INT); // 绑定第一个占位符为整数类型的值100
    $stmt->execute();
    foreach ($stmt as $record) {
        var_dump($record); // 可视化输出每条记录的结构与内容
    }
} catch (PDOException $e) {
    // 统一的错误处理入口,可在此记录错误日志或触发告警机制
    echo "数据库操作异常: " . $e->getMessage();
}
?>

最佳实践建议

  • 参数绑定永远不要遗漏,这是防御SQL注入的关键防线;即使看似安全的输入也可能隐藏风险。
  • 事务控制可用于保证多个相关操作要么全部成功要么全部回滚:
     $pdo->beginTransaction();
     // ...执行一系列更新操作...
     $pdo->commit(); // 若无异常则提交事务
     // 如果中途出错则调用rollBack()撤销所有已执行的操作
  • 持久化连接复用可通过构造函数第三个布尔参数控制,但需权衡性能与资源占用问题。

对比归纳表

特性 MySQLi PDO
API风格 专用于MySQL的面向对象接口 通用数据库抽象层
多数据库支持 仅限MySQL SQLite/PostgreSQL/Oracle等均可
预处理语句语法 基于方法链式调用 统一的prepare()+bindParam组合
错误处理机制 传统警告抑制模式 面向对象的异常捕获体系
学习曲线 相对平缓适合初学者 初期稍复杂但长期收益更高

常见问题解答FAQs

Q1: 出现“Access denied for user ‘xxx’@’localhost’”怎么办?

A: 此错误通常由以下原因导致:①用户名或密码输入不正确;②该用户未被授权访问指定数据库;③主机地址限制过于严格(如只允许特定IP连接),解决方法包括:检查凭证拼写是否正确;登录MySQL命令行执行GRANT ALL PRIVILEGES ON dbname. TO 'user'@'host'; FLUSH PRIVILEGES;重新授权;确认php配置文件中的mysqli.default_socket路径有效。

php连接 数据库的代码怎么写  第3张

Q2: 中文乱码如何解决?

A: 根本原因在于编码不匹配,解决方案是在建立连接后立即设置客户端字符集为UTF-8:对于MySQLi使用$conn->set_charset("utf8mb4");;对于PDO则在DSN中添加charset=utf8mb4参数,同时确保数据库表的DEFAULT COLLATE设置为utf8mb4_general_ci,HTML页面也声明为<meta charset=”UTF-

0