它用于這部分代碼:
some_list. where("'#{@new_params[:email]}' ~~* name"/span>).any?
我試著用google搜索,但我只找到了~ rxp的描述,這對我來說同樣不清楚(尤其是在例子中)。我以前沒有使用Ruby的經驗,如果問題很愚蠢,請原諒。
uj5u.com熱心網友回復:
~~*實際上與Ruby沒有任何關系。它是Postgres特定的ILIKE運算子,用于模式匹配。
這段代碼也是SQL注入漏洞的一個教科書式的例子。用戶輸入應該被引數化。
some_list.where("? ~~* name", @new_params[:email]).any?
這段代碼也很奇怪,因為它有一個Yoda條件。通常情況下,你會把它寫成:
some_list。 where("name ~~* ?", @new_params[:email]).any?
uj5u.com熱心網友回復:
這和ruby沒有關系。你構建了一個sql查詢,并將其傳遞給#where方法,因此它是一個PostgreSQL運算子。
運算子~~相當于LIKE,而~~*對應于ILIKE。還有!~~和!~~*運算子,分別代表NOT LIKE和NOT ILIKE。所有這些運算子都是PostgreSQL特有的。
這就是你要傳入它的內容:
"[email protected] ILIKE name"
uj5u.com熱心網友回復:
where子句中的任何字串都將被放入SQL查詢中,然后被交給資料庫。所以~~*的語法不是ruby,而是SQL。我的猜測是,你正在使用Postgres作為資料庫,因為:
運算子~~相當于LIKE,而~~*對應于ILIKE。還有!~~和!~~*運算子,分別代表NOT LIKE和NOT ILIKE。所有這些運算子都是PostgreSQL特有的。
摘自:https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-LIKE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307006.html
標籤:
