2012-11-27 100 views
1

中這是一個愚蠢的簡單的事情,但我沒有谷歌退出的答案:MySQL準備聲明 - ? WHERE子句

PREPARE stmt1 FROM 'SELECT productCode, productName 

       FROM products 

       WHERE productCode = ?'; 

是什麼?最後? '?'不是SQL中的通配符,所以它是什麼...

- 編輯:謝謝!

回答

2

?被稱爲參數佔位符。

聲明可能是不完整的,因爲是 未知的準備時間數據值由問號 字符作爲參數標記表示。在執行語句 時,您提供了特定的數據值,每個參數 在語句中都有一個值。

0

您是否使用ORM如主義? ORM通常使用佔位符(?)代替值,並且僅在執行前應用它們。

0

?用作預先未知的值的佔位符。

假設你有兩個?在你的聲明,那麼你可以定義哪些參數是什麼值將是代替它們使用的?指標賦予它們的值(如同我們在Java)

我我使用Java的例子來讓你明白的PreparedStatement:

讓說我的查詢是:

PreparedStatement ps = connection.prepareStatement(
        `select * from employee where ename = ? and location = ?`); 

所以我定義的佔位符反對進行檢查的值和location,同時執行查詢。

現在我設定的值,而不(以Java作爲我們)改變了我的查詢

ps.setString(1,"John"); 
ps.setString(2,"New York"); 

所以現在在運行時查詢將是:

select * from employee where ename = 'John' and location = 'New York'

如果我下一次想要改變的價值,那麼我會這樣做:

ps.setString(1,"Williams"); 
ps.setString(2,"London"); 

所以,現在我的查詢將是:

select * from employee where ename = 'Williams' and location = 'London'