MySQL:Prepared Statement 预处理语句

预处理语句(Prepared Statements)是 MySQL 中一种用于执行 SQL 查询的高效、安全的方法。通过使用预处理语句,可以显著提升查询性能,并防止 SQL 注入攻击。本文将详细介绍 MySQL 预处理语句的概念、使用方法及其优势。

一、预处理语句概述

预处理语句是一种预编译的 SQL 语句,包含 SQL 语句模板和绑定参数。预处理语句的执行过程分为两步:

  1. 预编译 SQL 语句:服务器对 SQL 语句进行语法检查,并生成执行计划。
  2. 执行预处理语句:将参数值绑定到预编译的 SQL 语句中并执行。
二、使用预处理语句
1. 准备环境

首先,我们需要一个测试用的数据库表。例如,我们创建一个名为 employees 的表:

CREATE TABLE employees (emp_id INT AUTO_INCREMENT PRIMARY KEY,emp_name VARCHAR(100),dept_id INT,salary DECIMAL(10, 2)
);INSERT INTO employees (emp_name, dept_id, salary) VALUES
('Alice', 1, 5000.00),
('Bob', 2, 6000.00),
('Charlie', 1, 5500.00),
('David', 3, 7000.00),
('Eve', 2, 6500.00);
​
2. 预处理语句的基本使用

预处理语句主要包括三个步骤:准备、执行和关闭。

准备预处理语句:

PREPARE stmt_name FROM 'SQL语句';
​

绑定参数并执行预处理语句:

EXECUTE stmt_name USING @param1, @param2, ...;
​

关闭预处理语句:

DEALLOCATE PREPARE stmt_name;
​
3. 示例

我们使用预处理语句来查询部门 ID 为 1 的员工信息:

-- 准备预处理语句
PREPARE stmt FROM 'SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = ?';-- 设置参数
SET @dept_id = 1;-- 执行预处理语句
EXECUTE stmt USING @dept_id;-- 关闭预处理语句
DEALLOCATE PREPARE stmt;
​
三、预处理语句的优势
1. 提升性能

预处理语句通过预编译 SQL 语句,避免了每次执行 SQL 语句时都进行解析和编译,从而提升了查询性能,特别是在需要多次执行相同 SQL 语句的场景中。

2. 防止 SQL 注入

预处理语句将参数绑定与 SQL 语句分离,避免了将用户输入直接插入到 SQL 语句中,从而有效防止了 SQL 注入攻击。

四、高级用法
1. 使用多个参数

预处理语句可以使用多个参数。以下示例演示了如何使用多个参数:

-- 准备预处理语句
PREPARE stmt FROM 'SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = ? AND salary > ?';-- 设置参数
SET @dept_id = 2;
SET @min_salary = 6000;-- 执行预处理语句
EXECUTE stmt USING @dept_id, @min_salary;-- 关闭预处理语句
DEALLOCATE PREPARE stmt;
​
2. 在存储过程中使用预处理语句

预处理语句也可以在存储过程中使用。以下是一个示例存储过程:

DELIMITER $$CREATE PROCEDURE GetEmployeesByDept(IN dept_id INT)
BEGINPREPARE stmt FROM 'SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = ?';EXECUTE stmt USING dept_id;DEALLOCATE PREPARE stmt;
END $$DELIMITER ;-- 调用存储过程
CALL GetEmployeesByDept(1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/83401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EPPLUS——CAD c#读写EXCEL的第三方库

EPPLUS(可支持NET35) 在 CAD 的 C# 二次开发中,使用 EPPLUS 库处理 Excel 文件具有以下显著优点,尤其在兼容性、便捷性和性能等方面契合 CAD 项目的需求: 1. 跨.NET 版本兼容性强,适配 CAD 多环境部署 多框架支持:EP…

Linux知识回顾总结----进程状态

本章将会介绍进程的一些概念:冯诺伊曼体系结构、进程是什么,怎么用、怎么表现得、进程空间地址、物理地址、虚拟地址、为什么存在进程空间地址、如何感性得去理解进程空间地址、环境变量是如何使用的。 目录 1. 冯诺伊曼体系结构 1.1 是什么 1.2 结论 …

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…

Android Test3 获取的ANDROID_ID值不同

Android Test3 获取的ANDROID_ID值不同 这篇文章来说明上一篇文章中说到的一个现象:在同一个项目中,创建不同的 app module,运行同一段测试代码,获取到的 ANDROID_ID 的值不同。 我也是第一次认真研究这个现象,这个还…

JSON 和 LabVIEW Data Types 互相转换

使用JSONtext C:\Program Files (x86)\National Instruments\LabVIEW 2021\examples\JDP Science\JSONtext JSONtext LabVIEW Data Types.vi

docker和docker-compose的版本对应关系怎么看?

docker和docker-compose的版本对应关系怎么看?最近在安装这两个工具,像知道他们的版本对应关系,查了不少资料才找到。 虽然 Docker 和 Docker Compose 的版本并不严格绑定,但是在某些情况下,新版本的 Docker Compose …

邮科ODM摄像头:多维度护航高铁安全系统方案解析

‌高铁作为现代交通的重要支柱,其安全稳定运行依赖于高效的监控体系。摄像头系统作为高铁安全管理的“视觉感知中枢”,凭借多场景覆盖、智能分析以及环境适应性设计,在行车安全、设备维护、乘客服务等方面发挥着不可或缺的作用。本文将从技术…

盒模型小全

CSS盒子模型详解 1. 定义 CSS盒子模型是用于描述HTML元素在页面中布局和表现的核心概念之一。在CSS中,所有HTML元素都被视为一个矩形的盒子,这些盒子封装了周围的HTML元素,并允许在其他元素和周围元素边框之间的空间放置内容。 2. 组成部分…

自定义鼠标效果 - 浏览器扩展使用教程

自定义鼠标效果 - 浏览器扩展使用教程 这里写目录标题 自定义鼠标效果 - 浏览器扩展使用教程功能特点安装方法Chrome/Edge浏览器 使用指南1. 更改鼠标光标样式2. 启用鼠标轨迹效果3. 自定义轨迹效果点状/彩虹/渐隐轨迹:表情轨迹: 管理自定义光标支持的文…

基于SpringBoot实现的课程答疑系统设计与实现【源码+文档】

基于SpringBootVue实现的课程答疑系统采用前后端分离架构方式,系统设计了管理员、学生、老师三种角色,系统实现了用户登录与注册、个人中心、学生管理、老师管理、科目类型管理、学生问题管理、老师回答管理、老师信息管理、关注列表管理、交流区、轮播图…

御微半导体面试总结

前一阵子在公司干的难受,所以再合肥这边面试了几家公司,挑一个御微半导体来说一下吧,公司主要是做半导体晶元测量的,具体啥我也不太明白。 公司产品线多,每条产品线配有独立的软件、结构、光学控制等人员开发语言和框…

Android Compose 自定义圆形取色盘

val Dp.toPx: Floatget() {var scale 3f // MyApplication.context.resources.displayMetrics.apply { // scale density // }return value * scale}val colors List(360) { i ->Color.hsv(360f - i, 1f, 1f) // 360到1的所有HSV颜色 }Preview …

vscode 配置 latex

下载插件 安装插件前自行安装 texlive, 按照 https://tug.org/texlive/ 要求安装 找到 settings 打开 json 文件 在 json 文件中添加如下配置 "latex-workshop.latex.tools": [{"name": "latexmk","command": "latexmk",&qu…

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(质检)

船舶质检管理现状:质检环节部分依赖人工检测,质检员依据质量标准对产品进行抽检或全检。人工质检受质检员主观因素影响较大,不同质检员对标准的把握可能存在差异。 一、痛点与需求 1 Arbigtec 人工经验依赖严重: 质检员的检测准确…

jenkins gerrit-trigger插件配置

插件gerrit-trigger下载好之后要在Manage Jenkins -->Gerrit Trigger-->New Server 中新增Gerrit Servers 配置好保存后点击“状态”查看是否正常

ubuntu24.04下 zookeeper3.8.4 集群的配置

1、环境 1.1 三台机器网络互通,并做hosts解析 准备三台及以上ubuntu24.04主机(奇数) rootzk-node01:~# hostname zk-node01rootzk-node01:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 u24-server10.0.49.215 zk-node01 10.0.4…

火山引擎 veFuser:面向扩散模型的图像与视频生成推理服务框架

资料来源:火山引擎-开发者社区 DiT 模型与推理挑战 近年来,扩散模型(Diffusion Models)在生成式人工智能领域取得了突破性进展,尤其是在图像和视频生成方面表现卓越。基于 Transformer 的扩散模型(DiT, D…

动态多目标进化算法:VARE(Vector Autoregressive Evolution)求解DF1-DF14,提供完整MATLAB代码

一、VARE简介 VARE(Vector Autoregressive Evolution)算法是2023年提出的一种新型的动态多目标优化(DMO)算法,旨在有效处理随时间变化的多目标优化问题。它通过结合向量自回归(VAR)模型和环境感…

【JavaEE】-- HTTPS

文章目录 1. HTTPS是什么?2. 加密是什么?2.1 引入对称加密(效率高)2.2 引入非对称加密(效率低)2.3 引入证书2.3.1 数据签名2.3.2 通过证书解决中间人攻击 1. HTTPS是什么? HTTP也是一个应用层协…

撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度

撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度 提问 为我写一个改变关节base_spherical_center_high_joint角度的python脚本吧。适用于ROS2的humble 回答 下面是一个适用于 ROS 2 Humble 的 Python 脚本,它会以指定频率持续发布 …