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
繁體地址,請注明出處:http://hk.pswp.cn/web/83401.shtml
英文地址,請注明出處:http://en.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 腳本,它會以指定頻率持續發布 …