在 PHP 中使用 mysqli 扩展与 MySQL 数据库进行交互是一个常见的操作。下面是如何使用 mysqli 来增加一条数据、删除一条数据、查询一条数据以及查询多条数据的示例代码。
1、增加一条数据
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要插入的数据 $name = "John Doe"; $email = "[email protected]"; // SQL 插入语句 $sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')"; if ($conn->query($sql) === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } // 关闭连接 $conn->close(); ?>
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要插入的数据 $name = "John Doe"; $email = "[email protected]"; // 准备 SQL 插入语句 $stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->bind_param("ss", $name, $email); // "ss" 表示两个字符串参数 if ($stmt->execute() === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $stmt->error; } $stmt->close(); $conn->close(); ?>
2. 删除一条数据
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要删除的数据的ID $id = 1; // SQL 删除语句 $sql = "DELETE FROM users WHERE id = $id"; if ($conn->query($sql) === TRUE) { echo "记录删除成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } // 关闭连接 $conn->close(); ?>
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要删除的数据的ID $id = 1; // 注意:在实际应用中,你应该验证和清理这个输入 // 准备 SQL 删除语句 $stmt = $conn->prepare("DELETE FROM users WHERE id = ?"); $stmt->bind_param("i", $id); // "i" 表示一个整数参数 if ($stmt->execute() === TRUE) { echo "记录删除成功"; } else { echo "Error: " . $stmt->error; } $stmt->close(); $conn->close(); ?>
3. 查询一条数据
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要查询的数据的ID $id = 1; // SQL 查询语句 $sql = "SELECT id, name, email FROM users WHERE id = $id"; $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 结果"; } // 关闭连接 $conn->close(); ?>
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 要查询的数据的ID $id = 1; // 注意:在实际应用中,你应该验证和清理这个输入 // 准备 SQL 查询语句 $stmt = $conn->prepare("SELECT id, name, email FROM users WHERE id = ?"); $stmt->bind_param("i", $id); // "i" 表示一个整数参数 $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 结果"; } $stmt->close(); $conn->close(); ?>
<?php include_once ("db.php"); // 定义要查询的参数 $account = $_POST["member_name"]; $password = $_POST["member_password"]; // 准备 SQL 语句 // 注意:对于数字类型的参数,不需要引号;对于字符串类型的参数,需要适当的引号(在预处理语句中会自动处理) $sql = "SELECT * FROM `members` WHERE `name` = ? AND `password` = ?"; $stmt = $mysqli->prepare($sql); // 绑定参数到 SQL 语句 $stmt->bind_param("ss", $account, $password); // "ss" 表示两个字符串参数 // 如果参数是数字,可以使用 "i" (整型) 或 "d" (双精度浮点型) // 例如: $stmt->bind_param("is", $param1, $param2); 如果 $param1 是字符串,$param2 是整型 // 执行语句 $stmt->execute(); // 获取结果 $result = $stmt->get_result(); $row = $result->fetch_assoc(); // 获取一行作为关联数组 // 检查是否找到了行 if ($row) { // 处理找到的行数据 $memberLogin = md5("memberLogin"); session_start(); $_SESSION[$memberLogin] = $account; echo "登录成功"; echo "<script>window.location.href = '/index.php';</script>"; } else { echo "<script>alert('账户或密码错误');history.go(-1);</script>"; //返回 } // 关闭语句和连接 $stmt->close(); $mysqli->close();
在这个例子中,我们创建了一个到 MySQL 数据库的连接,然后准备了一个带有两个占位符(?)的 SQL 查询语句。我们使用 bind_param 方法来绑定实际的参数值到这些占位符。执行语句后,我们使用 get_result 方法来获取结果对象,并使用 fetch_assoc 方法来获取第一行数据作为关联数组。
请注意,LIMIT 1 用于确保查询只返回一条数据。如果你的查询逻辑允许返回多条数据,你可以省略 LIMIT 1 或使用循环来遍历结果集。
此外,对于字符串类型的参数,我们在 bind_param 方法中使用了 “ss” 来指示有两个字符串参数。如果参数类型不同(例如,一个是字符串,另一个是整数),你需要相应地调整类型指示符(例如,”is”)。
4. 查询多条数据
<?php $servername = "localhost"; $username = "your_username"; $password = "your_password"; $dbname = "your_database"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // SQL 查询语句 $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 结果"; } // 关闭连接 $conn->close(); ?>
<?php // ...(连接代码与上面相同) // 准备 SQL 查询语句(注意:这里没有绑定参数,因为查询是固定的) $stmt = $conn->prepare("SELECT id, name, email FROM users"); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { // 输出数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 结果"; } $stmt->close(); $conn->close(); ?>
注意事项
1、安全性:在生产环境中,避免直接将用户输入插入到 SQL 查询中,以防止 SQL 注入攻击。可以使用预处理语句(prepared statements)来防止这种攻击。
2、错误处理:对于生产环境,建议添加更详细的错误处理和日志记录。
3、连接管理:如果需要在多个脚本或多次操作中使用数据库连接,考虑使用连接池或持久连接。
4、在 PHP 中使用 mysqli 扩展与 MySQL 数据库交互时,防止 SQL 注入是非常重要的。SQL 注入攻击通常发生在攻击者能够操纵 SQL 查询的输入部分时。为了防止这种情况,你应该使用预处理语句(prepared statements)和参数化查询。
5、然而,对于上面的查询多条数据的例子,由于查询不包含用户输入,直接使用 mysqli_query() 也是可以的