是以對于中文亂碼,需要去check的地方有如下3個:1、mysql視窗的字元編碼(xshell連接配接的遠端工具的字元集設定);
2、資料庫的字元編碼(show variables like '%char%');
3、linux作業系統的字元編碼(echo $LANG);
檢查mysql伺服器所在的linux os的字元集: cat /etc/sysconfig/i18n
MySQL官方将prepare、execute、deallocate統稱為PREPARE STATEMENT。
我習慣稱其為【預處理語句】。
其用法十分簡單,
PREPARE stmt_nameFROMpreparable_stmt
EXECUTE stmt_name
[[email protected]_name [, @var_name] ...] -
{DEALLOCATE| DROP}PREPARE stmt_name
舉個栗子:
mysql> PREPARE pr1 FROM 'SELECT ?+?';
Query OK, 0 rows affected (0.01 sec)
Statement prepared
mysql> SET @a=1, @b=10 ;
Query OK, 0 rows affected (0.00 sec)
mysql> EXECUTE pr1 USING @a, @b;
+------+
| ?+? |
+------+
| 11 |
+------+
1 row in set (0.00 sec)
mysql> EXECUTE pr1 USING 1, 2; -- 隻能使用使用者變量傳遞。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near '1, 2' at line 1
mysql> DEALLOCATE PREPARE pr1;
Query OK, 0 rows affected (0.00 sec)
使用PAREPARE STATEMENT可以減少每次執行SQL的文法分析,
比如用于執行帶有WHERE條件的SELECT和DELETE,或者UPDATE,或者INSERT,隻需要每次修改變量值即可。
同樣可以防止SQL注入,參數值可以包含轉義符和定界符。
适用在應用程式中,或者SQL腳本中均可。
更多用法:
同樣PREPARE ... FROM可以直接接使用者變量:
mysql> CREATE TABLE a (a int);
Query OK, 0 rows affected (0.26 sec)
mysql> INSERT INTO a SELECT 1;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> INSERT INTO a SELECT 2;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> INSERT INTO a SELECT 3;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SET @select_test = CONCAT('SELECT * FROM ', @table_name);
Query OK, 0 rows affected (0.00 sec)
mysql> SET @table_name = 'a';
Query OK, 0 rows affected (0.00 sec)
mysql> PREPARE pr2 FROM @select_test;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE pr2 ;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
mysql> DROP PREPARE pr2; -- 此處DROP可以替代DEALLOCATE
Query OK, 0 rows affected (0.00 sec)
每一次執行完EXECUTE時,養成好習慣,須執行DEALLOCATE PREPARE … 語句,這樣可以釋放執行中使用的所有資料庫資源(如遊标)。
不僅如此,如果一個session的預處理語句過多,可能會達到max_prepared_stmt_count的上限值。
預處理語句隻能在建立者的會話中可以使用,其他會話是無法使用的。
而且在任意方式(正常或非正常)退出會話時,之前定義好的預處理語句将不複存在。
如果在存儲過程中使用,如果不在過程中DEALLOCATE掉,在存儲過程結束之後,該預處理語句仍然會有效
PHP MySQL 預處理語句
PHP MySQL 預處理語句 預處理語句對于防止 MySQL 注入是非常有用的. 預處理語句及綁定參數 預處理語句用于執行多個相同的 SQL 語句,并且執行效率更高. 預處理語句的工作原理如下: 預 ...
mysql之預處理語句prepare、execute、deallocate
預制語句的SQL文法基于三個SQL語句: PREPARE stmt_name FROM preparable_stmt; EXECUTE stmt_name [USING @var_name [, @ ...
MySQL預處理語句
預制語句的SQL文法基于三個SQL語句: PREPARE stmt_name FROM preparable_stmt; EXECUTE stmt_name [USING @var_name [, @ ...
mysql -- 預處理語句
所謂預處理,即在真正執行某條SQL語句之前,先将SQL語句準備好,在執行過程中再綁定資料 文法: 準備預處理 prepare 預處理名字 from ‘要執行的SQL語句’ 執行預處理 execute ...
吳裕雄--天生自然 PHP開發學習:MySQL 預處理語句
PHP MySQL -處理語句
PHP MySQL 預處理語句 預處理語句對于防止 MySQL 注入是非常有用的. 預處理語句及綁定參數 預處理語句用于執行多個相同的 SQL 語句,并且執行效率更高. 預處理語句的工作原理如下: 預 ...
MySQL 遊标(PREPARE預處理語句)
概述 本章節介紹使用遊标來批量進行表操作,包括批量添加索引.批量添加字段等.如果對存儲過程.變量定義.預處理還不是很熟悉先閱讀我前面寫過的關于這三個概念的文章,隻有先了解了這三個概念才能更好的了解這篇 ...
了解Mysql prepare預處理語句
MySQL 5.1對伺服器一方的預制語句提供支援.如果您使用合适的用戶端程式設計界面,則這種支援可以發揮在MySQL 4.1中實施的高效用戶端/伺服器二進制協定的優勢.候選界面包括MySQL C API客 ...
mysql中SQL執行過程詳解與用于預處理語句的SQL文法
mysql中SQL執行過程詳解 用戶端發送一條查詢給伺服器: 伺服器先檢查查詢緩存,如果命中了緩存,則立刻傳回存儲在緩存中的結果.否則進入下一階段. 伺服器段進行SQL解析.預處理,在優化器生成對應的 ...
随機推薦
JVM 備注
一.堆記憶體分布: JAVA 分為堆記憶體和棧記憶體,GC主要針對堆記憶體 1)Young: 存放新生記憶體對象 1.1)Eden JVM 剛開始配置設定的對象 1.2)Survivor1(from) 1.3)Su ...
ZZULIOJ 1726 迷宮(BFS+小坑)
1726: 迷宮 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 394 Solved: 64 SubmitStatusWeb Board Descr ...
S5PV210之beep-bus模型 linux3.0.8驅動
目錄: 一. bus-driver-device模型 二. 運作結果,及錯誤解決 三. 怎樣利用以有的driver device驅動來寫自已的beep-driver-device 驅動 四 ...
Ionic 測試針對Andorid平台
環境準備: (1)nodejs環境以及配置完成: [email protected]:~$ node -v v0.12.2 (2)Android SDK 環境變量已經配置完畢: export ANDROID_SDK=/home/ ...
php 中資料類型
總體劃分 8 中 1基本類型(标量) 整型 int 整型的三種寫法 <?php $n1 = 123; //10進制 $n2 = 0123; //8進制 $n3 = 0x123;//16進制 // ...
小白學PYTHON時最容易犯的6個錯誤,看看你遇到過幾個
最近又在跟之前的同學一起學習python,一起進步,發現很多測試同學在初學python的時候很容易犯一些錯誤,特意總結了一下.其實這些錯誤不僅是在學python時會碰到,在學習其他語言的時候也同樣會碰 ...
【BZOJ5469】[FJOI2018]上司集團問題(動态規劃,線段樹合并)
[BZOJ5469][FJOI2018]上司集團問題(動态規劃,線段樹合并) 題面 BZOJ 洛谷 題解 題目就是讓你在樹上找一個最大的點集,使得兩個點如果存在祖先關系,那麼就要滿足祖先的權值要小于等 ...
RDLC 主從報表篩選
今天繼續學習RDLC報表的“參數傳遞”及“主從報表” 一.先建立DataSet,如下圖: 二.建立一個報表rptDEPT.rdlc,顯示部門T_DPET的資料 三.嵌入Default.aspx中,寫在 ...
django之中間件middleware
django 中的中間件(middleware),在django中,中間件其實就是一個類,在請求到來和結束後,django會根據自己的規則在合适的時機執行中間件中相應的方法. 在django項目的se ...
svn分支
在svn上我們除過一般的儲存文檔外,對于開發source,可以使用 trunk(主線),branch(分線), tag(上線或測試用) 做分支應用開發. trunk上建立代碼位置,存放代碼. 點選Te ...