我試圖在PHP中創建聯繫表單搜索。多列無格式postgres搜索
示例項:
名稱:粉色
電話:555-888-1234
我要搜索的姓名和電話輸入框和返回像匹配的結果不區分大小寫。
例子:
在名稱搜索「p」和沒有電話號碼,並取回結果。
在電話號碼字段中搜索'5'並且沒有名字,得到結果。
在名稱字段中搜索「x」,得不到結果,目前我得到結果。
$query = "SELECT * FROM contacts WHERE name ~* '.*$name.*' OR phone ~* '.*$phone.*'";
我使用pg_query_params和傳遞和用戶輸入作爲參數在我們的真實代碼,這是一個簡化的例子,但是謝謝你指出SQL注入漏洞。我確實在postgres上登錄過,但沒有想到會在那裏看到,這會派上用場。它看起來像在飛行中建立查詢將起作用,但我也必須考慮是否包括或如果有人沒有輸入第一個值。我將不得不測試我是否仍然需要轉義正則表達式,如果它們作爲參數傳遞,希望不是。 – apuschak
@apuschak您仍然必須轉義作爲參數傳遞的正則表達式,因爲它們的正則表達式元字符仍然很重要。不幸的是,我不認爲PostgreSQL有一個內置的'regexp_escape_string'或任何可以幫助你的東西。 –