mysql2/promise 中 execute 和 query 的使用最佳實(shí)踐
mysql2/promise 中 execute 和 query 的使用
1.executevsquery
| 方法 | 原理 | 特點(diǎn) |
|---|---|---|
db.execute() | 使用 Prepared Statement (預(yù)處理語句) | 參數(shù)嚴(yán)格類型檢查,性能穩(wěn)定,防 SQL 注入 |
db.query() | 直接拼接 SQL 發(fā)送給 MySQL 執(zhí)行 | 參數(shù)綁定更寬松,對 LIMIT/OFFSET 不會(huì)類型檢查 |
2. 為什么query可以?
因?yàn)?query 方法:
- 不走 prepare + execute 兩階段過程
- 而是 一次性發(fā)送完整 SQL(即使你用
?占位符,也只是 Node.js 側(cè)簡單替換后拼接),
所以,下面代碼對 query 來說是可行的:
const sql = `SELECT * FROM dictionary ${searchQuery} ORDER BY id ASC LIMIT ? OFFSET ?`;
const [results] = await db.query(sql, [...searchParams, Number(pageSize), Number(offset)]);3. 什么時(shí)候使用 query?
- 語句不需要重復(fù)執(zhí)行、對性能要求不極致時(shí),可用
query,代碼更寬容。 - 如果
LIMIT、OFFSET參數(shù)會(huì)報(bào)錯(cuò),換query可以快速解決。
4. 什么時(shí)候使用 execute?
- 當(dāng)
SQL 需要頻繁執(zhí)行(如同一個(gè)查詢反復(fù)調(diào)用),使用execute結(jié)合 Prepared Statement 可以提升性能。 - 需要嚴(yán)格防 SQL 注入時(shí),優(yōu)先
execute,但在LIMIT/OFFSET場景需改成拼接數(shù)字。
5. 最佳實(shí)踐
查詢數(shù)據(jù)
const sql = `SELECT * FROM table LIMIT ${Number(limit)} OFFSET ${Number(offset)}`;
const [rows] = await db.execute(sql, params);
// 或者
const [rows] = await db.query(sql, params);更新/插入
const [result] = await db.execute('INSERT INTO user(name) VALUES(?)', [name]);總結(jié)
query 在 LIMIT/OFFSET 場景下可直接使用,不會(huì)出現(xiàn) Incorrect arguments to mysqld\_stmt\_execute 錯(cuò)誤
如果使用 execute,LIMIT/OFFSET 需拼接數(shù)字常量
到此這篇關(guān)于mysql2/promise 中 execute 和 query 的使用最佳實(shí)踐的文章就介紹到這了,更多相關(guān)mysql execute 和 query使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL execute、executeUpdate、executeQuery三者的區(qū)別
- python中pymysql的executemany使用方式
- The MySQL server is running with the --read-only option so it cannot execute this statement
- MySQL中預(yù)處理語句prepare、execute與deallocate的使用教程
- MySQL報(bào)錯(cuò)Lost connection to MySQL server during query的解決方案
- mysql慢查詢?nèi)罩痉治龉ぞ呤褂?pt-query-digest)
- MySQL query_cache_type 參數(shù)與使用詳解
相關(guān)文章
windows上的mysql服務(wù)突然消失提示10061 Unkonwn error問題及解決方案
windows10 系統(tǒng),今天早晨系統(tǒng)自己更新了下,也沒啥問題,突然發(fā)現(xiàn)電腦上安裝的mysql 服務(wù)沒了,經(jīng)過一系列原因分析終于找到解決方案,今天小編給大家分享mysql服務(wù)突然消失:10061 Unkonwn error解決方法,一起看看吧2023-07-07
Mysql 數(shù)字類型轉(zhuǎn)換函數(shù)
Mysql 數(shù)字類型轉(zhuǎn)換函數(shù),有此需要的朋友可以參考下用法。2009-08-08
mysql中engine=innodb和engine=myisam的區(qū)別介紹
MyISAM類型不支持事務(wù)處理等高級處理,而InnoDB類型支持,本文為大家講解下mysql中engine=innodb和engine=myisam的區(qū)別,不懂的朋友可以學(xué)習(xí)下,希望對大家有所幫助2013-07-07
MySQL5.6解壓版服務(wù)無法啟動(dòng)之系統(tǒng)錯(cuò)誤1067問題
這篇文章主要介紹了MySQL5.6解壓版服務(wù)無法啟動(dòng)—系統(tǒng)錯(cuò)誤1067問題及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
mysql數(shù)據(jù)庫備份設(shè)置延時(shí)備份方法(mysql主從配置)
這篇文章主要介紹了mysql數(shù)據(jù)庫延時(shí)備份的方法,也就是mysql主從服務(wù)器備份,可以同步到多個(gè)服務(wù)器,最后我們提供了一個(gè)備份腳本,大家參考使用吧2013-12-12

