滚动新闻 →
电影为什么会从一种新奇技术变成全球性娱乐产业 115年国庆大会 雷虎3色彩烟压轴冲场 离谱!浙江女38元买榴莲 开出土豆年糕 于朦胧、金泽成先例?经纪人曝男星更易被潜规则 武汉“封城市长”周先旺获刑14年 加拿大没有收到T4还能报税吗 殖民地总督如何行使司法权 卡霍基亚曾经是怎样的一座北美城市 沙特联军大规模行动 摧毁“胡塞武装”上百个目标 家庭换门锁需要注意什么 韩国大邱超市天花板崩落 至少38人轻伤 GPU 利用率很高是否意味着 AI 系统性能很好,还有哪些指标必须同时观察 Google Cloud Storage 上传大文件有哪些方法,断点续传和并行上传应该如何选择 支付成功以后 SaaS 怎么知道?从支付通知到开通会员完整理解 笔记本电脑屏幕突然黑屏,但外接显示器正常,应该检查哪些部件 今年第3次 屏东万丹泥火山无预警喷发 宋佳凭一角色拿下三大奖 疑背后有推手 今年最后“水星东大距”10/12登场 把握观测机会 Windows 11 文件夹怎么批量重命名?不用逐个修改文件名称 诺贝尔奖得主警告:法国债务“大到救不起” PHP Cookie 怎么使用?网站记住用户状态时需要注意哪些问题 从王维诗歌看中国传统审美 五味与传统饮食观念 华为刹车板断裂事件持续发酵 业内专家判断一致 崩溃!小伙子上山采蘑菇 误用粪瓢舀泉水喝 行书究竟介于楷书和草书之间吗 天津武清半马赛 42岁男子猝死 家属要真相 湖北烟花爆燃12人死 顾客试放“震天雷”所致 如何培养孩子尊重清洁工和普通劳动者 川普放宽俄柴油制裁 泽连斯基呛:送普京大礼 广州“砍树书记”落马 湖南帮传闻再受关注 高帧率视频适合拍什么 巴拿马7.7强震 路毁屋塌 全国学校停课 涉转运英伟达AI晶片服务器至中国 美超微包商认罪 曾带百车进死胡同 网红车出游获“隔离保护” 烂柯杯战火重燃 韩国反客为主 八强占五席 三国时代为什么会形成 北京一景区小马被游客骑断腰椎 瘫坐在地死亡 115年国庆大会登场 展现台湾民主活力团结韧性 华为百万豪车刹车断裂 测评视频接连下架惹议

PHP 如何连接 MySQL?从数据库连接到执行第一条查询语句

发布时间: 2026-08-29 18:00:03    最后更新: 2026-10-09 08:43:49    阅读:97  约11 分钟阅读     

PHP 如何连接 MySQL?从数据库连接到执行第一条查询语句
图片说明:示意图   图片来源:Public Domain(公有领域)
对于使用PHP开发的网站来说,MySQL数据库几乎是最常见的数据存储方案之一。新闻文章、用户账号、评论、阅读量以及网站后台设置,都可以通过MySQL保存和读取。 因此,对于刚开始学习PHP的人来说,掌握PHP如何连接MySQL,是进入实际网站开发非常重要的一步。 现代PHP连接MySQL主要有两种方式:PDO和MySQLi。两者都属于目前仍在使用的正规数据库访问方式,也都支持预处理语句。此前PHP中的mysql_*系列函数已经被废弃并最终从PHP中移除,因此新项目不应该再使用诸如mysql_connect()和mysql_query()这样的旧式代码。 准备MySQL数据库 在PHP连接MySQL之前,首先需要确认MySQL服务已经正常运行,并且已经创建了需要使用的数据库。 例如,可以创建一个名为my_database的数据库: CREATE DATABASE my_database; 实际网站中,还应该为应用程序创建专门的数据库用户,而不是直接使用MySQL的管理员账号。例如: CREATE USER 'php_user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON my_database.* TO 'php_user'@'localhost'; 这样做的好处是可以把网站程序与数据库管理员权限分开。即使网站程序出现安全问题,也不应该让网站使用的数据库账号拥有整个MySQL服务器的最高权限。 生产环境中,数据库密码也不建议直接写在公开的代码仓库里,更合理的方式是通过配置文件、环境变量或者服务器上的安全配置保存数据库连接信息。 使用MySQLi建立第一个数据库连接 PHP提供的MySQLi扩展专门用于MySQL数据库操作。最简单的连接方式如下: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); try { $conn = new mysqli( 'localhost', 'php_user', 'password', 'my_database' ); $conn->set_charset('utf8mb4'); } catch (mysqli_sql_exception $e) { die('数据库连接失败'); } 这里有一个初学者容易忽略的问题:new mysqli()本身并不是默认遇到错误就自动抛出异常。如果希望使用try...catch捕获数据库连接和查询异常,可以通过mysqli_report()开启相应的错误报告模式。 另外,设置: $conn->set_charset('utf8mb4'); 也非常重要。对于中文网站,使用utf8mb4能够更好地处理中文、特殊字符以及Emoji等Unicode字符。 如果连接成功,PHP就已经建立了与MySQL服务器之间的数据库连接。 执行第一条SELECT查询 建立连接以后,就可以执行SQL查询。 例如,假设数据库中存在一个users表: $sql = "SELECT id, name, email FROM users"; $result = $conn->query($sql); 如果查询成功,$result会返回结果对象。接下来可以逐条读取数据: while ($row = $result->fetch_assoc()) { echo "ID: " . $row['id']; echo ",姓名:" . $row['name']; echo ",邮箱:" . $row['email']; echo "
"; } fetch_assoc()会把当前记录转换成关联数组,因此可以通过数据库字段名访问对应的数据。 例如: $row['id'] $row['name'] $row['email'] 分别对应数据库中的id、name和email字段。 如果查询成功,但是数据库中没有任何记录,并不意味着query()执行失败。对于成功执行的SELECT语句,即使结果集为空,仍然会得到一个结果对象,只是其中没有数据。因此,“没有查询到记录”和“SQL执行失败”是两个完全不同的问题。 为什么不能直接把用户输入拼进SQL 实际网站中,很少会永远查询固定数据。例如,网站可能需要根据用户提交的ID查询文章: $id = $_GET['id']; 这时候千万不要直接把变量拼接进SQL: $sql = "SELECT * FROM news WHERE id = $id"; 这种写法可能导致SQL注入等安全问题。 更安全的方式是使用预处理语句。 MySQLi的写法如下: $stmt = $conn->prepare( "SELECT id, title, content FROM news WHERE id = ?" ); $stmt->bind_param("i", $id); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['title']; } 这里的?是参数占位符,真正的数据通过bind_param()传入。 这样,SQL语句结构和用户提供的数据就被分开处理,可以有效降低SQL注入风险。 INSERT、UPDATE和DELETE同样应该使用预处理 如果网站需要保存用户提交的信息,也应该使用预处理语句。 例如向用户表插入姓名和邮箱: $name = 'Tom'; $email = 'tom@example.com'; $stmt = $conn->prepare( "INSERT INTO users (name, email) VALUES (?, ?)" ); $stmt->bind_param("ss", $name, $email); $stmt->execute(); 这里的ss表示两个参数都是字符串。 如果参数是整数,则可以使用i。例如: $stmt->bind_param("i", $id); 在实际项目中,查询、增加、修改和删除数据库记录,都应该尽量采用这种参数化方式,而不是通过字符串拼接构造SQL。 PHP也可以使用PDO 除了MySQLi,PHP还可以使用PDO连接MySQL。 例如: $pdo = new PDO( 'mysql:host=localhost;dbname=my_database;charset=utf8mb4', 'php_user', 'password' ); $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); PDO的优势在于提供了相对统一的数据库访问接口。除了MySQL之外,还可以通过相应驱动连接其他数据库。 如果一个PHP项目确定长期使用MySQL,MySQLi和PDO都可以成为合理选择;如果希望使用统一的数据库抽象接口,PDO通常更加方便。 对于新开发的网站,重要的并不是纠结“PDO还是MySQLi谁绝对更快”,而是选择一种现代数据库接口,并始终坚持使用预处理语句、正确的字符集以及合理的错误处理方式。 查询失败应该如何排查 PHP连接MySQL时,最常见的问题通常集中在几个方面。 如果出现类似: Access denied for user 首先检查数据库用户名、密码、主机地址以及数据库用户权限。 如果出现: Unknown database 通常意味着指定的数据库不存在,或者数据库名称写错。 如果SQL执行失败,则需要检查SQL语法、表名、字段名以及当前数据库用户是否拥有相应权限。 开发阶段可以记录详细的数据库异常信息,例如: try { // 数据库操作 } catch (mysqli_sql_exception $e) { error_log($e->getMessage()); die('数据库操作失败'); } 但在正式网站中,不应该直接把完整的数据库错误信息显示给普通访客,因为错误信息可能暴露数据库结构、表名甚至服务器配置。 是否需要主动关闭数据库连接 在普通PHP网站中,一个请求执行结束以后,数据库连接通常会随PHP请求生命周期结束而释放,因此并不是每个简单脚本都必须在最后写: $conn->close(); 不过,如果是长期运行的PHP进程、CLI程序、队列Worker或者其他持续运行的服务,就应该更加重视数据库连接的生命周期和资源管理。 对于普通网站程序,更重要的是不要在一个请求过程中毫无必要地建立大量数据库连接,并且应该把数据库连接代码进行统一管理。 从连接MySQL开始建立良好的代码习惯 PHP连接MySQL看起来只是几行代码,但它实际上涉及网站安全和程序架构中的多个重要问题。 一个规范的数据库操作流程通常包括:建立连接、设置正确的字符集、执行参数化查询、处理结果、捕获异常,并根据业务需要使用事务。 对于初学者来说,最重要的并不是记住某一个函数,而是建立正确的数据库操作习惯。 不要使用已经淘汰的mysql_*函数,不要把用户输入直接拼接到SQL中,不要把数据库管理员账号用于网站程序,也不要把生产环境的数据库密码随意写入公开代码。 掌握这些基本原则之后,再学习PDO、MySQLi、事务、索引和查询优化,PHP数据库开发就会逐渐从“能连接数据库”进入真正的工程实践阶段。 对于一个实际运行的网站来说,PHP连接MySQL只是第一步。真正决定数据库系统是否可靠的,是后面的SQL设计、安全控制、索引规划、错误处理以及整个应用程序的数据访问架构。

喜欢这篇报道?

使用下面的功能,方便以后继续阅读和分享 MNewsTV

设为 Google 新闻首选来源 让 Google 新闻优先显示 MNewsTV 的最新报道 ›
★ 我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

捐助(Paypal): https://www.paypal.me/observeccp
订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP