我對SQLite
查詢有疑問。我在iOS sqlite數據庫的一些示例代碼中有一個包含四行三列的表。帶問號的Sqlite查詢
,我從表與查詢獲取數據: -
Select * from table where column_name=? ;
我根據示例代碼..what是否具有與column_name=?
問題?的意思是......
它用於遞增行嗎?
我對SQLite
查詢有疑問。我在iOS sqlite數據庫的一些示例代碼中有一個包含四行三列的表。帶問號的Sqlite查詢
,我從表與查詢獲取數據: -
Select * from table where column_name=? ;
我根據示例代碼..what是否具有與column_name=?
問題?的意思是......
它用於遞增行嗎?
The?是一個真實值的佔位符,您必須綁定到編譯語句的值。這個link詳細說明了綁定。
綁定值而不是將它們放在查詢字符串中的原因是,它防止了SQL注入攻擊 - 如果您使用的是直接從用戶提供的值,則可能發生這種情況。
我希望它可以幫助你...「?」標記用於...。
這通常意味着一個準備好的語句,其中參數在稍後填寫。 (例如參見http://en.wikipedia.org/wiki/Prepared_statements#Parameterized_statements)。
OR
在一些陳述,當製備語句,因爲不同的值可以在每次執行該語句時被插入參數是未知的。在這些語句中,您可以使用問號(?)佔位符,其中必須在執行語句時提供參數。
OR
儘管PreparedStatement對象可用於SQL語句不帶參數,你可能會使用他們最經常的帶參數的SQL語句。使用帶參數的SQL語句的優點是,您可以使用相同的語句並在每次執行時使用不同的值。
的?
表示您會得到一個值綁定的佔位符(如設置文本值,使用sqlite3_bind_text
後您sqlite3_prepare_v2
的語句,但你sqlite3_step
執行它。
見sqlite3_bind
文檔。
這是一個非常重要的構造知道和使用,因爲你永遠不想使用stringWithFormat
建立你的SQL。通過使用sqlite3_bind
,你不必編寫代碼來逃避你可能在你的輸入中有任何引號,例如你正試圖插入值o f Joe's Bar and Grill
(如果您使用單引號,則撇號會混淆您的SQL)或Dwayne "The Rock" Johnson
(如果您使用雙引號,引號會導致SQL混亂)。它還可以防止SQL注入攻擊。絕對使用sqlite3_bind
而不是手動構建SQL語句。
嘿感謝得到它:) – user2353519 2013-05-08 13:04:58
放在這裏你的列名 – 2013-05-08 12:39:58
? - 佔位符的實際價值 – Eugene 2013-05-08 12:40:26
但它會得到真正的價值? bcz我們不是在使用像字符串中的「%@」來傳遞實際值 – user2353519 2013-05-08 12:42:02