mysql eval,mysql中是否有类似于eval的写法的,答案在这里
在我們寫sql的時候,經常可能會遇到同一個問題:mysql是否具備eval的功能從而使我的變量動態加載到對應的sql語句中:
eval('echo "abc";');
?>
var s=eval("{'a':'123456'}");
//---您的mysql也想玩eval?
答案是肯定的,沒有,但是不要灰心 有個一個很好用的方法來替代:
PREPARE statement_name FROM sql_text /*定義*/
EXECUTE statement_name [USING variable [,variable...]] /*執行預處理語句*/
DEALLOCATE PREPARE statement_name /*刪除定義*/
例子:
mysql> PREPARE prod FROM "INSERT INTO examlple VALUES(?,?)";
mysql> SET @p='1';
mysql> SET @q='2';
mysql> EXECUTE prod USING @p,@q;
mysql> SET @name='3';
mysql> EXECUTE prod USING @p,@name;
mysql> DEALLOCATE PREPARE prod;
使用 PREPARE 的幾個注意點:
A:PREPARE stmt_name FROM preparable_stmt;預定義一個語句,并將它賦給 stmt_name ,tmt_name 是不區分大小寫的。
B: 即使 preparable_stmt 語句中的 ? 所代表的是一個字符串,你也不需要將 ? 用引號包含起來。
C: 如果新的 PREPARE 語句使用了一個已存在的 stmt_name ,那么原有的將被立即釋放! 即使這個新的 PREPARE 語句因為錯誤而不能被正確執行。
D: PREPARE stmt_name 的作用域是當前客戶端連接會話可見。
E: 要釋放一個預定義語句的資源,可以使用 DEALLOCATE PREPARE 句法。
F: EXECUTE stmt_name 句法中,如果 stmt_name 不存在,將會引發一個錯誤。
G: 如果在終止客戶端連接會話時,沒有顯式地調用 DEALLOCATE PREPARE 句法釋放資源,服務器端會自己動釋放它。
H: 在預定義語句中,CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。
I: PREPARE 語句不可以用于存儲過程,自定義函數!但從 MySQL 5.0.13 開始,它可以被用于存儲過程,仍不支持在函數中使用!
當然一個悲劇的壞消息最后告訴你:
這個東西好用但是不要妄想給他封裝到哪個函數里面
這個雖然能解決問題不要想用到觸發器里面,甚至造到存儲過程中用觸發器引用也是不被允許的
看完上面兩點請冷靜一下洗洗睡吧
建議: 你可以 把他封裝到存儲過程中用動態語言調用 這個是可以玩得轉的哦!
最后編輯:2017-09-07作者:Tony
這個人很懶什么也沒留!~
總結
以上是生活随笔為你收集整理的mysql eval,mysql中是否有类似于eval的写法的,答案在这里的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash动画制作作品_flash施工动
- 下一篇: python saltstack web