PHP与MySQL建立连接执行SQL语句,代码怎么写?
- 虚拟主机
- 2025-12-17
- 6
PHP与MySQL建立连接并执行SQL语句是Web开发中常见的操作,下面将详细介绍实现这一过程的代码步骤、注意事项及最佳实践,整个过程包括连接数据库、执行查询、处理结果以及关闭连接四个核心环节。
建立MySQL连接需要使用PHP提供的mysqli扩展或PDO扩展,以mysqli扩展为例,通过mysqli_connect()函数可以建立连接,该函数需要服务器地址、用户名、密码和数据库名四个必要参数,连接成功后,返回一个连接对象,后续操作均依赖此对象。$conn = mysqli_connect("localhost", "root", "password", "testdb");,连接建立后,需通过mysqli_connect_errno()检查是否成功,若失败则输出错误信息并终止脚本。
接下来是执行SQL语句,使用mysqli_query()函数可以向数据库发送查询命令,该函数接受连接对象和SQL语句作为参数,执行查询后,根据语句类型返回不同结果:SELECT语句返回结果集对象,INSERT/UPDATE/DELETE语句返回布尔值表示是否成功。$result = mysqli_query($conn, "SELECT * FROM users");,需要注意的是,SQL语句中若包含用户输入,必须使用预处理语句防止SQL载入攻破,可通过mysqli_prepare()和mysqli_stmt_bind_param()实现。

处理查询结果是关键环节,对于SELECT查询,通过mysqli_fetch_array()、mysqli_fetch_assoc()或mysqli_fetch_object()函数可以逐行获取结果集数据,这些函数分别返回数组、关联数组或对象形式的数据。while($row = mysqli_fetch_assoc($result)) { echo $row["username"]; },循环结束后,需使用mysqli_free_result()释放结果集内存,避免资源泄漏。
完成操作后,必须关闭数据库连接,通过mysqli_close($conn)函数可以切断与数据库的连接,释放服务器资源,虽然PHP脚本执行完毕后会自动关闭连接,但显式关闭是良好的编程习惯,尤其在长时间运行的脚本中尤为重要。

以下是完整的代码示例,包含连接、查询、处理结果和关闭连接的全过程:
<?php // 1. 建立连接 $conn = mysqli_connect("localhost", "root", "password", "testdb"); if (!$conn) { die("连接失败: " . mysqli_connect_error()); } // 2. 执行SQL语句 $sql = "SELECT id, username, email FROM users"; $result = mysqli_query($conn, $sql); // 3. 处理查询结果 if (mysqli_num_rows($result) > 0) { echo "<table border='1'>"; echo "<tr><th>ID</th><th>用户名</th><th>邮箱</th></tr>"; while($row = mysqli_fetch_assoc($result)) { echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["username"] . "</td>"; echo "<td>" . $row["email"] . "</td>"; echo "</tr>"; } echo "</table>"; } else { echo "0 结果"; } // 4. 释放结果集并关闭连接 mysqli_free_result($result); mysqli_close($conn); ?>
在实际开发中,还需注意以下几点:一是使用字符集连接,通过mysqli_set_charset($conn, "utf8")避免乱码;二是错误处理机制,对每个数据库操作进行错误捕获;三是连接池管理,在高并发场景下考虑使用持久连接或连接池技术;四是事务处理,通过mysqli_begin_transaction()、mysqli_commit()和mysqli_rollback()确保数据一致性。
以下是相关问答FAQs:

Q1: 如何防止SQL载入攻破?
A1: 防止SQL载入的最佳实践是使用预处理语句(Prepared Statements),通过mysqli_prepare()预处理SQL模板,再使用mysqli_stmt_bind_param()绑定参数,最后执行mysqli_stmt_execute()。
$stmt = mysqli_prepare($conn, "INSERT INTO users (username, email) VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, "ss", $username, $email); mysqli_stmt_execute($stmt);
预处理语句会将数据与SQL语句分开处理,确保用户输入不会被解释为SQL代码。
Q2: 为什么使用PDO扩展比mysqli更好?
A2: PDO扩展相比mysqli具有以下优势:一是支持多种数据库(MySQL、PostgreSQL、SQLite等),代码可移植性更强;二是默认使用预处理语句,安全性更高;三是提供统一的接口,无论操作何种数据库语法基本一致,例如PDO连接代码:
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "root", "password"); $stmt = $pdo>prepare("SELECT * FROM users WHERE id = ?"); $stmt>execute([$id]); $user = $stmt>fetch();
尤其需要支持多种数据库或追求代码简洁时,PDO是更优选择。