当前位置:首页 > 文章列表 > 文章 > php教程 > PHP连接MySQL数据库教程及代码示例

PHP连接MySQL数据库教程及代码示例

2025-10-29 23:40:45 0浏览 收藏

大家好,今天本人给大家带来文章《PHP连接MySQL数据库步骤与代码示例》,文中内容主要涉及到,如果你对文章方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

答案:PHP连接MySQL推荐使用mysqli或PDO扩展,需经建立连接、设置字符集、执行SQL、关闭连接等步骤,并优先采用预处理语句防止SQL注入。

PHP如何连接到MySQL数据库_PHP连接MySQL数据库的步骤与代码示例

PHP连接MySQL数据库的核心在于利用PHP内置的数据库扩展,最常用且推荐的是mysqliPDO(PHP Data Objects)。这两种方式都提供了建立数据库连接、执行SQL查询、处理结果集以及安全关闭连接的完整功能。理解它们的运作机制,对于任何需要与MySQL交互的PHP应用来说,都是基石。

解决方案

PHP连接MySQL数据库通常涉及以下几个关键步骤,这里我们以mysqli扩展为例,因为它在很多场景下更直接、性能也相当不错,而且是面向过程和面向对象两种风格都支持的。

  1. 建立数据库连接: 这是第一步,你需要提供MySQL服务器的地址(通常是localhost或IP地址)、用户名、密码以及可选的数据库名称。

    <?php
    $servername = "localhost"; // MySQL服务器地址
    $username = "your_username"; // 数据库用户名
    $password = "your_password"; // 数据库密码
    $dbname = "your_database"; // 要连接的数据库名称
    
    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);
    
    // 检查连接是否成功
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    }
    echo "数据库连接成功!";
    ?>
  2. 设置字符集(非常重要): 为了避免中文乱码等问题,在建立连接后立即设置字符集是一个好习惯。

    <?php
    // ... 前面的连接代码 ...
    
    if (!$conn->set_charset("utf8mb4")) { // 推荐使用utf8mb4支持更广泛的字符,包括Emoji
        printf("加载字符集 utf8mb4 失败: %s\n", $conn->error);
        exit();
    }
    echo "字符集设置成功!";
    ?>
  3. 执行SQL查询: 连接建立并字符集设置好后,你就可以执行各种SQL语句了,比如SELECTINSERTUPDATEDELETE等。

    • 查询数据 (SELECT):

      <?php
      // ... 前面的连接代码 ...
      
      $sql = "SELECT id, firstname, lastname FROM MyGuests";
      $result = $conn->query($sql);
      
      if ($result->num_rows > 0) {
          // 输出每行数据
          while($row = $result->fetch_assoc()) {
              echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
          }
      } else {
          echo "0 结果";
      }
      ?>
    • 插入数据 (INSERT):

      <?php
      // ... 前面的连接代码 ...
      
      $sql = "INSERT INTO MyGuests (firstname, lastname, email)
      VALUES ('John', 'Doe', 'john@example.com')";
      
      if ($conn->query($sql) === TRUE) {
          echo "新记录插入成功";
      } else {
          echo "Error: " . $sql . "<br>" . $conn->error;
      }
      ?>
  4. 关闭数据库连接: 当你完成所有数据库操作后,务必关闭连接以释放资源。

    <?php
    // ... 前面的连接代码和查询代码 ...
    
    $conn->close();
    echo "数据库连接已关闭。";
    ?>

以上就是使用mysqli扩展连接MySQL数据库的基本流程。我个人在开发中,对于简单快速的原型或者对性能有极致要求的场景,会倾向于mysqli的面向对象风格。

PHP连接MySQL时,我们应该选择mysqli还是PDO?

这个问题,坦白说,是很多PHP开发者初入数据库操作时都会纠结的。我的建议是,如果项目规模较大、需要支持多种数据库(不只是MySQL),或者对代码的抽象性和灵活性有较高要求,那么PDO无疑是更好的选择。它提供了一个统一的接口来访问不同类型的数据库,这意味着如果你未来需要从MySQL切换到PostgreSQL或SQLite,代码改动会相对较小。PDO在处理预处理语句(Prepared Statements)方面也表现得更为优雅和一致,这对于防止SQL注入至关重要。

然而,如果你只是专注于MySQL,并且偏好更直接、更“贴近金属”的API,那么mysqli是一个非常强大的选择。它提供了MySQL特有的高级功能,并且在性能上与PDO不相上下,甚至在某些特定场景下可能略有优势。mysqli既支持面向过程的风格(mysqli_connect()),也支持面向对象的风格(new mysqli()),这给了开发者更多的选择。我个人更倾向于mysqli的面向对象风格,因为它让代码看起来更整洁,更符合现代PHP的编程范式。

总的来说,没有绝对的“最好”,只有最适合你项目需求的。但无论如何,请务必远离那些已经废弃的mysql_函数,它们不仅不安全,而且早已从PHP的新版本中移除。

处理PHP连接MySQL时常见的错误与调试技巧

在PHP连接MySQL的过程中,遇到错误几乎是家常便饭,尤其是在开发初期。最常见的错误无外乎以下几种:

  1. 连接凭据错误: 用户名、密码、主机名或端口号不正确。
    • 调试技巧: 仔细检查你的$servername, $username, $password, $dbname变量。确保它们与MySQL服务器的配置完全一致。如果你使用的是localhost,有时尝试127.0.0.1会有奇效,反之亦然。检查MySQL用户是否允许从你的PHP应用所在的IP地址连接。
  2. 数据库不存在: 你尝试连接的数据库名称拼写错误或根本不存在。
    • 调试技巧: 登录到MySQL客户端(如phpMyAdmin、MySQL Workbench或命令行),确认数据库名称是否正确。
  3. MySQL服务未运行: MySQL服务器本身可能没有启动。
    • 调试技巧: 检查服务器状态。如果你在本地开发,确保你的WAMP/MAMP/XAMPP环境中的MySQL服务已启动。在Linux服务器上,可以使用systemctl status mysqlservice mysql status来查看。
  4. 权限问题: 你的PHP进程可能没有足够的权限访问MySQL套接字文件或网络端口。
    • 调试技巧: 检查文件权限,尤其是mysql.sock文件的权限。防火墙也可能阻挡了连接。

在PHP代码中,我们应该始终包含错误检查机制。对于mysqli$conn->connect_error会捕获连接错误,而$conn->error则会捕获查询错误。

<?php
$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    // 这里的die()会终止脚本执行,并在页面上显示错误信息
    die("数据库连接失败: " . $conn->connect_error);
}

// 假设这里有一个查询
$sql = "SELECT * FROM non_existent_table"; // 故意制造一个错误
$result = $conn->query($sql);

if (!$result) {
    // 这里的错误信息会告诉你查询出了什么问题
    echo "查询错误: " . $conn->error;
}
?>

对于PDO,错误处理通常通过设置错误模式和使用try-catch块来完成,这使得错误处理更加结构化和健壮。

<?php
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置PDO错误模式为异常,这样在出现错误时会抛出PDOException
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "数据库连接成功!";

    // 假设这里有一个查询
    $sql = "SELECT * FROM another_non_existent_table";
    $stmt = $conn->prepare($sql);
    $stmt->execute();

} catch(PDOException $e) {
    // 捕获并显示错误信息
    echo "数据库操作失败: " . $e->getMessage();
}
?>

我的经验是,在开发阶段,不要害怕让错误信息直接显示出来(当然,在生产环境中要避免)。详细的错误信息是解决问题的关键线索。

如何防止SQL注入攻击:PHP数据库操作的安全实践

SQL注入无疑是数据库安全领域最臭名昭著的漏洞之一,它能让恶意用户通过输入数据来篡改你的SQL查询,从而窃取、修改甚至删除你的数据。防止SQL注入,在我看来,是任何与数据库交互的应用程序开发者必须掌握的核心技能。

最有效且推荐的防御机制是使用预处理语句(Prepared Statements)参数绑定(Parameter Binding)。无论是mysqli还是PDO,都提供了对这一机制的良好支持。

它的基本原理是:你先向数据库发送一个带有占位符的SQL模板,数据库会预编译这个模板。然后,你再将实际的数据作为参数发送给数据库。数据库会严格区分SQL代码和数据,确保任何用户输入都被视为数据,而不是可执行的SQL代码。

  • 使用mysqli的预处理语句:

    <?php
    // ... 假设 $conn 已经建立并连接成功 ...
    
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
    
    // 检查预处理是否成功
    if (!$stmt) {
        die("预处理失败: " . $conn->error);
    }
    
    // 绑定参数
    // 'sss' 表示三个参数都是字符串类型 (s=string, i=integer, d=double, b=blob)
    $stmt->bind_param("sss", $firstname, $lastname, $email);
    
    // 设置参数值
    $firstname = "Alice";
    $lastname = "Smith";
    $email = "alice@example.com";
    $stmt->execute(); // 执行第一个插入
    
    $firstname = "Bob";
    $lastname = "Johnson";
    $email = "bob@example.com";
    $stmt->execute(); // 执行第二个插入
    
    echo "新记录插入成功";
    
    $stmt->close(); // 关闭预处理语句
    ?>
  • 使用PDO的预处理语句:

    <?php
    // ... 假设 $conn 已经建立并连接成功 (PDO 对象) ...
    
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)");
    
    // 绑定命名参数或问号占位符
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);
    
    // 设置参数值并执行
    $firstname = "Charlie";
    $lastname = "Brown";
    $email = "charlie@example.com";
    $stmt->execute();
    
    // 也可以直接在execute中传递数组
    $stmt->execute([
        ':firstname' => 'David',
        ':lastname' => 'Lee',
        ':email' => 'david@example.com'
    ]);
    
    echo "新记录插入成功";
    ?>

除了预处理语句,还有一些辅助性的安全措施:

  • 最小权限原则: 数据库用户只授予其完成任务所需的最小权限。例如,一个Web应用用户通常不需要DROP TABLEGRANT权限。
  • 输入验证: 在将用户输入用于任何操作之前,对其进行严格的验证。这包括数据类型、长度、格式等。虽然这不能完全替代预处理语句,但能过滤掉很多无效或恶意输入。
  • 错误信息隐藏: 在生产环境中,不要向用户显示详细的数据库错误信息。这些信息可能包含敏感数据或为攻击者提供攻击线索。记录错误到日志文件,而不是直接输出到页面。

在我看来,预处理语句是防止SQL注入的黄金标准,它的重要性再怎么强调都不为过。当你开始写任何涉及用户输入的数据库操作时,第一反应就应该是“我该如何用预处理语句来做这个?”。

以上就是《PHP连接MySQL数据库教程及代码示例》的详细内容,更多关于mysql,php的资料请关注golang学习网公众号!

ESLint解析AST检测代码问题ESLint解析AST检测代码问题
上一篇
ESLint解析AST检测代码问题
GolangMac配置PATH方法详解
下一篇
GolangMac配置PATH方法详解
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3182次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3393次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3425次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4530次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3802次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码