滚动新闻 →
冲击钻和普通电钻有什么区别 习近平健康传闻再起 被爆和秦刚常喝到不省人事 中国女大学生遭拐40年 人已疯癫无法沟通 GPU 利用率为什么经常低于预期,从任务调度到数据加载逐层分析真实原因 委内瑞拉拟达协议 转移40亿美元黄金至纽约联准银行 Google Cloud SDK 和 API 有什么区别,自动化运维应该如何选择工具 一个完整的 SaaS 系统,需要哪些基础模块才能正常运行 巴基斯坦警察总部爆枪战还在持续 增至31死逾百伤 硬盘通电后完全没有声音和振动,怎样判断是供电问题还是硬盘故障 同框爱女尽显温柔 周杰伦低调行善18年更暖 Windows 11 深色模式和浅色模式怎么选择?系统界面可以这样调整 江西村庄惊现“监控树” 一根杆挂84摄像头 PHP 报错信息怎么看?开发阶段应该如何打开和关闭错误显示 《西游记》中的妖怪为何如此丰富 基隆早餐店发生猛烈火势 即时疏散员工无人伤 这种“高颜值”植物千万别碰 全株都有毒 疑火车坐过头 男子破坏区间车设备迫停驶 立秋后的传统养生方式 古琴文化中的知音观念如何形成 孩子不愿意帮助家人,父母应该怎么办 家庭聚会视频怎样拍得更有观看价值 日评估:十胜岳火山“全面性大规模喷发”可能性升高 古代丝绸之路究竟改变了什么 家里东西越来越多应该先增加收纳还是先整理 美国家公园因游客的“错误决定”射杀一头黑熊 Costco那些退货商品都去了哪?原来这样处理 战火烧到沙特首都利雅德 当局拉响空袭警报 ZWO天文摄影师大赛落幕 仙王座惊呈掠食者 美国取得格陵兰“永久”军事权 中俄被挡门外 中国女离奇失踪7年 托梦闺蜜竟真找到尸骸 小麦如何改变了中国北方人的饮食方式 洛杉矶致命连环车祸 SUV司机被控二级谋杀 TIFF星光再聚 班德拉斯“父女”同框 杨紫琼亮相 亚运涂鸦风波后 台运动部长出席选手村开村受阻 为什么旅行行程不宜安排得过于紧凑 针对Medicaid 川普全美50州推“最惠国药价” 川普宣布重大协议 美国将永久掌控格陵兰安全 踩下油门后发动机反应迟钝怎么办 告别61年掌舵 巴菲特卸任伯克希尔董事长 伊朗海陆贸易全面受阻 当局启动基层军事动员

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

发布时间: 2026-08-29 18:00:03    最后更新: 2026-09-17 05:19:43    阅读:76  约11 分钟阅读     

对于使用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 的最新报道
我的收藏 查看已经收藏的文章
关于文章收藏 收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。 删除收藏请进入「我的收藏」进行管理。
分享这篇报道

分享 Facebook | X | WhatsApp | LinkedIn

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