php mysql代码怎么写?连接数据库查询数据步骤有哪些?
- 虚拟主机
- 2025-12-17
- 7
PHP与MySQL的结合是Web开发中非常经典的技术栈,通过PHP脚本可以轻松操作MySQL数据库,实现数据的存储、查询、更新和删除等功能,下面将详细介绍如何使用PHP与MySQL进行交互,包括环境搭建、连接数据库、执行SQL语句、处理结果集以及防止SQL载入等关键知识点。
确保你的开发环境中已经安装了PHP和MySQL,PHP通常通过Web服务器(如Apache或Nginx)运行,而MySQL则作为独立的数据服务器,你可以使用集成开发环境(如XAMPP、WAMP或MAMP)来快速搭建本地开发环境,这些环境已经预装了所需的软件。
连接MySQL数据库是PHP操作MySQL的第一步,PHP提供了多种方式连接MySQL,其中最常用的是使用MySQLi(MySQL Improved)扩展或PDO(PHP Data Objects)扩展,MySQLi是专门为MySQL设计的增强扩展,而PDO则是一个轻量级的、兼容多种数据库的抽象层,下面以MySQLi为例,展示如何连接到MySQL数据库:
<?php // 数据库连接参数 $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接是否成功 if ($conn>connect_error) { die("连接失败: " . $conn>connect_error); } echo "连接成功"; ?>
上述代码中,我们首先定义了数据库的连接参数,包括服务器名、用户名、密码和数据库名,然后使用mysqli类的构造函数创建一个连接对象,如果连接失败,connect_error属性会包含错误信息,我们使用die函数输出错误信息并终止脚本执行,如果连接成功,则输出“连接成功”。
连接成功后,就可以执行SQL语句来操作数据库了,MySQLi提供了多种执行SQL语句的方法,其中最常用的是query方法,用于执行单条SQL语句,下面的代码演示如何向数据库中插入一条数据:
<?php // 假设已经建立了$conn连接 $sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"; if ($conn>query($sql) === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn>conn_error; } ?>
在上述代码中,我们定义了一条INSERT语句,并使用query方法执行它,如果执行成功,query方法返回TRUE,否则返回FALSE,并通过conn_error属性获取错误信息。

查询数据是数据库操作中最常见的操作之一,使用MySQLi查询数据后,需要获取结果集并进行处理。query方法在执行SELECT语句时会返回一个mysqli_result对象,通过该对象可以遍历查询结果。
<?php // 假设已经建立了$conn连接 $sql = "SELECT id, name, email FROM users"; $result = $conn>query($sql); if ($result>num_rows > 0) { // 输出数据 while($row = $result>fetch_assoc()) { echo "id: " . $row["id"]. " Name: " . $row["name"]. " Email: " . $row["email"]. "<br>"; } } else { echo "0 结果"; } ?>
在上述代码中,我们首先执行了一条SELECT语句,并将结果存储在$result变量中,然后使用num_rows属性检查结果集中的行数,如果行数大于0,则使用fetch_assoc方法逐行获取数据,fetch_assoc方法返回一个关联数组,键名为结果集中的列名,我们使用while循环遍历所有行并输出数据。
为了更清晰地展示查询结果,可以使用表格来格式化输出。
<table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Email</th> </tr> <?php if ($result>num_rows > 0) { while($row = $result>fetch_assoc()) { echo "<tr>"; echo "<td>" . $row["id"] . "</td>"; echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["email"] . "</td>"; echo "</tr>"; } } ?> </table>
上述代码将查询结果输出为一个HTML表格,每行数据对应表格中的一行,每列数据对应表格中的一个单元格。
在开发过程中,安全性是非常重要的一个方面,SQL载入是一种常见的网络攻破方式,攻破者通过在输入字段中插入恶意SQL代码,来执行未授权的数据库操作,为了防止SQL载入,应该使用预处理语句(Prepared Statements)和参数化查询,预处理语句将SQL语句和数据分开处理,从而避免SQL载入的风险。

在上述代码中,我们首先使用prepare方法准备了一条SQL语句,其中是占位符,然后使用bind_param方法将变量绑定到占位符上,"ss"表示两个参数都是字符串类型,设置变量值并执行预处理语句,使用预处理语句可以有效地防止SQL载入攻破。
除了MySQLi,PDO也是操作MySQL的一种常用方式,PDO的优势在于它支持多种数据库,而不仅仅是MySQL,下面是一个使用PDO连接和查询MySQL数据库的示例:
<?php // 数据库连接参数 $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test_db"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置PDO错误模式为异常 $conn>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功"; } catch(PDOException $e) { echo "连接失败: " . $e>getMessage(); } // 查询数据 $stmt = $conn>prepare("SELECT id, name, email FROM users"); $stmt>execute(); $result = $stmt>setFetchMode(PDO::FETCH_ASSOC); // 输出数据 foreach(new TableGenerator($result) as $row) { echo $row["id"] . " " . $row["name"] . " " . $row["email"] . "<br>"; } $conn = null; ?>
在上述代码中,我们使用PDO的构造函数连接到MySQL数据库,并设置了错误模式为异常,这样在发生错误时会抛出PDOException异常,然后使用prepare方法准备了一条SELECT语句,并执行它,使用setFetchMode方法设置结果集的获取模式为关联数组,并遍历输出数据。
在使用PDO时,同样可以使用预处理语句来防止SQL载入。
<?php // 假设已经建立了$conn连接 $stmt = $conn>prepare("INSERT INTO users (name, email) VALUES (:name, :email)"); $stmt>bindParam(':name', $name); $stmt>bindParam(':email', $email); // 设置参数并执行 $name = "John Smith"; $email = "john.smith@example.com"; $stmt>execute(); echo "新记录插入成功"; ?>
在上述代码中,我们使用命名占位符(name和email)来代替位置占位符(),然后使用bindParam方法将变量绑定到命名占位符上,命名占位符的优点是代码更易读,尤其是在有多个参数的情况下。

在实际开发中,数据库操作通常封装在类中,以提高代码的可重用性和可维护性,下面是一个简单的MySQL数据库操作类的示例:
<?php class Database { private $conn; public function __construct($servername, $username, $password, $dbname) { try { $this>conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $this>conn>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "连接失败: " . $e>getMessage(); } } public function insert($table, $data) { $columns = implode(", ", array_keys($data)); $placeholders = ":" . implode(", :", array_keys($data)); $sql = "INSERT INTO $table ($columns) VALUES ($placeholders)"; $stmt = $this>conn>prepare($sql); $stmt>execute($data); } public function select($table, $conditions = "") { $sql = "SELECT * FROM $table"; if (!empty($conditions)) { $sql .= " WHERE $conditions"; } $stmt = $this>conn>prepare($sql); $stmt>execute(); return $stmt>fetchAll(PDO::FETCH_ASSOC); } public function close() { $this>conn = null; } } // 使用示例 $db = new Database("localhost", "root", "", "test_db"); $db>insert("users", ["name" => "Alice", "email" => "alice@example.com"]); $users = $db>select("users", "id > 1"); foreach ($users as $user) { echo $user["name"] . " " . $user["email"] . "<br>"; } $db>close(); ?>
在上述代码中,我们定义了一个Database类,该类封装了数据库连接、插入和查询等操作。insert方法用于向指定表中插入数据,select方法用于查询指定表中的数据,并支持条件查询,使用类封装数据库操作可以大大简化代码,并提高代码的可维护性。
PHP与MySQL的交互是Web开发中的基础技能,通过使用MySQLi或PDO扩展,可以轻松地连接到MySQL数据库,执行SQL语句,并处理结果集,为了确保安全性,应该始终使用预处理语句来防止SQL载入,将数据库操作封装在类中可以提高代码的可重用性和可维护性,掌握这些技能后,你就可以开始构建功能强大的Web应用程序了。
相关问答FAQs:
-
问:PHP中MySQLi和PDO有什么区别?如何选择?
答:MySQLi是专门为MySQL设计的增强扩展,提供了对MySQL特定功能的更好支持,如多语句执行和事务处理,PDO是一个数据库抽象层,支持多种数据库(如MySQL、PostgreSQL、SQLite等),具有更好的可移植性,如果你的项目只需要使用MySQL,并且需要利用MySQL的特定功能,可以选择MySQLi;如果你的项目可能需要切换数据库,或者希望代码具有更好的可移植性,可以选择PDO。
-
问:如何优化PHP与MySQL的交互性能?
答:优化PHP与MySQL的交互性能可以从以下几个方面入手:1)使用预处理语句和参数化查询,减少SQL解析时间;2)合理使用索引,加快查询速度;3)避免在循环中执行查询,尽量批量处理数据;4)使用缓存技术(如Redis、Memcached)缓存频繁访问的数据;5)优化SQL语句,避免使用SELECT *,只查询需要的字段;6)合理使用数据库连接池,减少连接建立和关闭的开销。