MySQL与PHP的基础与应用专题之数据控制
本文为MySQL与PHP的基础与应用专题之数据控制,将详细介绍如何在PHP中连接MySQL数据库、增删改查数据以及防止SQL注入攻击等相关知识。
1. 连接MySQL数据库
连接MySQL需使用PHP自带的MySQLi或PDO扩展。其中,MySQLi扩展提供了面向对象和面向过程两种操作方式,而PDO扩展则提供了跨数据库的支持。
// 使用MySQLi面向对象方式进行连接
$mysqli = new mysqli("localhost", "username", "password", "database");
// 使用MySQLi面向过程方式进行连接
$mysqli = mysqli_connect("localhost", "username", "password", "database");
// 使用PDO方式进行连接(需安装相应的数据库驱动)
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
2. 增删改查数据
在连接数据库后,接下来我们将演示如何进行数据的增删改查操作。
2.1. 插入数据
在MySQL中,插入数据需要使用INSERT INTO语句。
// 使用MySQLi面向对象方式插入数据
$sql = "INSERT INTO `users` (`name`, `age`) VALUES ('Tom', 20)";
$result = $mysqli->query($sql);
// 使用MySQLi面向过程方式插入数据
$sql = "INSERT INTO `users` (`name`, `age`) VALUES ('Tom', 20)";
$result = mysqli_query($mysqli, $sql);
// 使用PDO方式插入数据
$sql = "INSERT INTO `users` (`name`, `age`) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['Tom', 20]);
2.2. 更新数据
在MySQL中,更新数据需要使用UPDATE语句。
// 使用MySQLi面向对象方式更新数据
$sql = "UPDATE `users` SET `age` = 21 WHERE `name` = 'Tom'";
$result = $mysqli->query($sql);
// 使用MySQLi面向过程方式更新数据
$sql = "UPDATE `users` SET `age` = 21 WHERE `name` = 'Tom'";
$result = mysqli_query($mysqli, $sql);
// 使用PDO方式更新数据
$sql = "UPDATE `users` SET `age` = ? WHERE `name` = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([21, 'Tom']);
2.3. 删除数据
在MySQL中,删除数据需要使用DELETE语句。
// 使用MySQLi面向对象方式删除数据
$sql = "DELETE FROM `users` WHERE `name` = 'Tom'";
$result = $mysqli->query($sql);
// 使用MySQLi面向过程方式删除数据
$sql = "DELETE FROM `users` WHERE `name` = 'Tom'";
$result = mysqli_query($mysqli, $sql);
// 使用PDO方式删除数据
$sql = "DELETE FROM `users` WHERE `name` = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute(['Tom']);
2.4. 查询数据
在MySQL中,查询数据需要使用SELECT语句。对于查询结果,我们可以使用MySQLi或PDO提供的fetch方法进行数据的获取。
// 使用MySQLi面向对象方式查询数据
$sql = "SELECT * FROM `users`";
$result = $mysqli->query($sql);
$user = $result->fetch_assoc();
echo $user['name'];
// 使用MySQLi面向过程方式查询数据
$sql = "SELECT * FROM `users`";
$result = mysqli_query($mysqli, $sql);
$user = mysqli_fetch_assoc($result);
echo $user['name'];
// 使用PDO方式查询数据
$sql = "SELECT * FROM `users`";
$stmt = $pdo->query($sql);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
echo $user['name'];
3. 防止SQL注入攻击
SQL注入攻击是指攻击者利用Web应用程序没有对用户输入数据进行充分过滤和验证,从而注入恶意的SQL指令,以达到破坏数据库、控制系统等破坏性的攻击行为。为了防止SQL注入攻击,我们可以使用PHP中的预处理语句来过滤用户输入数据。
$name = "'Tom'; DROP TABLE users";
$sql = "SELECT * FROM `users` WHERE `name` = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$name]); // $name被过滤为字符串'Tom\'; DROP TABLE users'
示例说明
示例1. 用户注册
下面是一个简单的用户注册页面的代码示例。
$username = $_POST['username'];
$password = $_POST['password'];
// 连接MySQL数据库
$mysqli = new mysqli("localhost", "username", "password", "database");
// 防止SQL注入攻击
$username = addslashes($username);
$password = addslashes($password);
$username = mysqli_real_escape_string($mysqli, $username);
$password = mysqli_real_escape_string($mysqli, $password);
// 插入用户数据
$sql = "INSERT INTO `users` (`username`, `password`) VALUES (?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
echo "注册成功!";
示例2. 用户登录
下面是一个简单的用户登录页面的代码示例。
$username = $_POST['username'];
$password = $_POST['password'];
// 连接MySQL数据库
$mysqli = new mysqli("localhost", "username", "password", "database");
// 防止SQL注入攻击
$username = addslashes($username);
$password = addslashes($password);
$username = mysqli_real_escape_string($mysqli, $username);
$password = mysqli_real_escape_string($mysqli, $password);
// 查询用户数据
$sql = "SELECT * FROM `users` WHERE `username` = ? AND `password` = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
if ($user) {
echo "登录成功!";
} else {
echo "用户名或密码错误!";
}
以上就是本文的全部内容,希望能够帮助大家更好地进行MySQL与PHP的开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL与PHP的基础与应用专题之数据控制 - Python技术站