萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> sql 語句中的問號學習筆記

sql 語句中的問號學習筆記

今天在幫朋友改一cms時發現有些sql語帶有問號了,但個人壓根就沒見過這種寫法了,後來經朋友的指點才知道原來sql 語句中的問號另有作用呀,下面我來介紹一下。

我看到的一個實例

 

 代碼如下 復制代碼 String sql = "SELECT userid,name FROM tuser WHERE userid=? AND password=?" ;
  pstmt = conn.prepareStatement(sql) ;
  pstmt.setString(1,userid) ; // 這裡設置了第一個?的值
  pstmt.setString(2,password) ; // 這裡設置了第二個?的值

等你“setString”完所有的?後,你的sql就構造好了。

好了,如果說還是不懂我又找到一篇相關文章

參考資料一:

 代碼如下 復制代碼

select * from table where username='syy913'

username='syy913'

後面是個字符串。在數據庫裡面采用的是當引號。有句口訣叫單單雙雙加加。

單是用在數據庫裡面的,雙是用在外部編程語言裡面的,在c# java等語言是用的雙引號標識的字符串。

 代碼如下 復制代碼

string sql=”select * from table”;這就標識一個字符串。

string sql=”select * from table”+”where id>0″;2個字符串連接


下面的

 代碼如下 復制代碼

string sql=”select * from table where id>0″+”and name=?”;

這個問號表示 要傳參數。 要在執行這個sql前就必須把參數給他,上面的name是字符型的。你在看這樣寫什麼意思。

 代碼如下 復制代碼

string nn=”kill”

string sql=”select * from table where id>0 and name=?”;

由於?代表的是一個字符串。

們把nn輸出來看 他是不到“”這個的。

那麼就應該'nn'到數據庫去,即

 代碼如下 復制代碼

string sql=”select * from table where id>0 and name='nn'”;

就可以了,為什麼還要裡面+個雙引號呢?

 代碼如下 復制代碼

string sql=”select * from table where id>0 and name='”+nn+”‘”;

就把nn當一個變量給他了。

參考資料二:

這 個sql語句如果包含參數的話,可以用問號(”?”)來為參數進行占位,而不需要立即為參數賦值,而在語句執行之前,必須通過適當的set***()來 為問號處的參數賦值。New ParseInfo()中,包含了參數的sql語句就會被分解為多段,放在staticSql中,以便需要設置參數時定位參數的位置。假如sql語句為 “select * from adv where id = ? and name = ?”的話,那麼staticSql中的元素就是3個,staticSql[3]={ ”select * from adv where id = ”, ” and name = ” , ””}。注意數組中最後一個元素,在這個例子中是””,因為我的例子裡面最後一個就是”?”,如果sql語句是這樣的“select * from adv where id = ? and name = ? order by id”的話,staticSql就變成是這樣的{ ”select * from adv where id = ”, ” and name = ” , ” order by id”}。

無關參考三: (mysql 手冊 c api 預處理語句)

25.2.7.4. mysql_stmt_bind_param()

my_bool mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)

描述

mysql_stmt_bind_param()用於為SQL語句中的參數標記符綁定數據,以傳遞給mysql_stmt_prepare()。它使用MYSQL_BIND結構來提供數據。“bind”是MYSQL_BIND結構的某一數組的地址。按照客戶端庫的預期,對於查詢中出現的每個“?”參數標記符,數組中均包含1個元素。

假定你准備了下述語句:

 代碼如下 復制代碼

INSERT INTO mytbl VALUES(?,?,?)綁定參數時,MYSQL_BIND結構的數組包含3個元素,並能聲明如下:

MYSQL_BIND bind[3];

copyright © 萬盛學電腦網 all rights reserved