SQL語句的where
where id = 1 AND (sno = xxx OR 1 = 1)
用這試一下,sql注入的做法.
可是我要的是當sno沒值傳進來的時候就永遠成立,有值傳進來就要判斷的
這個恐怕做不到。
只能做到說是給sno一個默認值(一個sno永遠不可能的值),然后沒有參數進來的時候,程序自然去判斷1=1從而忽略掉sno = xxxx, 不去判斷后面的sno =xxx,
如果有參數進來的時候,程序首先判斷sno = 傳遞來得值,而忽略后面的1=1。
因此必須確保or前后的語句的次序以實現這個
select * from table where id=1 and (sno = xx OR 1 = 1)
sql注入個人能力范圍內只能到這個程度了。
sql where 語句查詢
對于你舉例的這個,直接用isnull(語文,''),空(NULL)為''。
where 輔助科目語文 like '%'+isnull(語文,'')+'%'這樣就行。
這樣如果語文是空的話,則拼起來的結果就是'%%',like '%%'可以起到1=1一樣的效果了。
另外也可以使用CASE WHEN
where 輔助科目語文 like (case when isnull(語文,'') = '' then '%' else '%'+語文+'%' end)
case when 就可以實現你的if功能。
有那么麻煩么?使用 columnname like '%' + ISNULL(:參數,'') + '%'
這個肯定夠使用了。只不過你的where條件要把所有的條件都拼進去。
isnull是空則為一個值的語法,不過是SQLSERVER的。ORACLE用NVL,MYSQL應該是IFNULL。如果是空,給兩個單引號,然后和百分號一拼接,肯定是百分號,那么使用like,當然是字符型才可以,空的話條件就是恒等。
轉載請注明出處華閱文章網 » where語句sql