MySQL与PHP的基础与应用专题之数据控制

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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • python MySQLdb Windows下安装教程及问题解决方法

    官方文档中提供两种Python操作MySQL数据库的扩展:MySQLdb和PyMySQL。其中,MySQLdb是Python2.x版本中专用的操作MySQL数据库扩展,而PyMySQL则支持Python2.x和Python3.x两个版本。本文将详细讲解Python2.x版本中MySQLdb在Windows下的安装教程及遇到的问题解决方法。 1. 安装MySQ…

    database 2023年5月22日
    00
  • MySQL中查询的有关英文字母大小写问题的分析

    大多数情况下,MySQL查询不区分英文字母的大小写,这意味着在查询时无需考虑表名,列名或值中字母的大小写。然而,在某些情况下,MySQL查询确实要求考虑字母的大小写,这取决于数据库和表的创建方式以及字段值的插入方式。下面是关于MySQL中英文字母大小写问题的详细攻略: MySQL表和列名中的大小写 在创建MySQL表或列时,大小写将会被保留。例如: CREA…

    database 2023年5月21日
    00
  • linux修改mysql数据库文件的路径

    下面是关于如何在Linux系统上修改MySQL数据库文件路径的攻略: 步骤一:停止MySQL服务 在开始修改数据库文件路径之前,需要先停止正在运行的MySQL服务。可以使用以下命令停止服务: sudo systemctl stop mysql 步骤二:修改my.cnf文件 在Linux系统上,MySQL配置文件通常位于/etc/mysql/my.cnf或/e…

    database 2023年5月22日
    00
  • MySQL如何查看正在运行的SQL详解

    MySQL 提供了多种方式来查看正在运行的 SQL 语句。下面是一些方法: 方法一:show processlist 使用 show processlist 命令,可以查看当前所有正在运行的 SQL 语句以及执行者等相关信息。 SHOW PROCESSLIST; 该命令将返回一个列表,其中包含当前连接的所有进程及其状态。其中一些字段包括 ID、USER、HO…

    database 2023年5月22日
    00
  • Mysql的Table doesn’t exist问题及解决

    Mysql数据库是一个非常流行的关系型数据库管理系统,但在使用过程中会遇到各种问题,其中一个常见问题就是“Table doesn’t exist”(表不存在)的错误。下面是如何解决这个问题的完整攻略。 问题原因 该问题的原因通常是由于数据库中没有该表造成的。有以下几个可能性: 数据库名称错误:如果数据库名称输入错误,那么就找不到该表。例如,如果你输入了类似S…

    database 2023年5月18日
    00
  • oracle停止数据库后linux完全卸载oracle的详细步骤

    针对这个问题,我为您提供以下详细步骤: 停止oracle数据库 在Linux系统中,使用以下命令停止oracle数据库: sqlplus / as sysdba shutdown immediate; exit; 回到Linux系统命令行界面 使用以下命令回到Linux系统的命令行界面: exit; 卸载oracle软件 使用以下命令卸载oracle软件: …

    database 2023年5月22日
    00
  • 在Linux环境下mysql的root密码忘记解决方法(三种)

    下面就详细讲解一下在 Linux 环境下 mysql 的 root 密码忘记了之后应该如何解决,包括三种解决方法: 方法一:使用 mysql 安全模式重置 root 密码 首先,关闭 mysql 服务: sudo systemctl stop mysql 然后,在安全模式下启动 mysql 服务,并跳过权限验证: sudo mysqld_safe –ski…

    database 2023年5月22日
    00
  • MySQL用户信息表中主键userID自动增加问题

    我建了一个userinfo的表,存储一些相关信息。 主键是userID,设置了AUTO_INCREMENT属性。 在我写了7条数据之后,再写入一条,userID应该是8. 之后我把userID为8的记录删除了,再写入一条userID就是9了。 这个问题,有办法解决么? 正统网站注册这一块是怎么解决这个问题的? 还是就这样无所谓。 ——————————————…

    MySQL 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部