sql >> Databáze >  >> RDS >> Mysql

Zabezpečení pro připravený SQL příkaz s REGEX v dotazu

Zástupné symboly nelze uvozovat. Jak jednoduché:

SELECT ... WHERE foo = ?
SELECT ... WHERE foo = '?'

První z nich je zástupný symbol a funguje podle očekávání. Druhým je testování rovnosti proti znaku "otazník". Už to není zástupný symbol.

A pak je tu problém ? být také metaznak regulárního výrazu. Pokud MOHOU být zástupné symboly v uvozovkách, pak je uveďte

SELECT ... WHERE foo REGEXP '^.?' 

že by to bylo ? být zástupným symbolem dotazu, nebo je to operátor rozsahu regulárního výrazu „nula nebo jedna“?

Pokud chcete v regulárních výrazech používat zástupné symboly, musíte „sestavit“ vzor regulárních výrazů

SELECT ... WHERE foo REGEXP concat('^.', ?)

Úplně stejným způsobem, jako byste museli vytvořit LIKE vzor:

SELECT ... WHERE foo LIKE '%?%' // wrong
SELECT ... WHERE foo LIKE concat('%', ?, '%') // right



  1. Získání názvu aktuální funkce uvnitř funkce pomocí plpgsql

  2. Získejte všechny uživatele kromě aktuálně přihlášeného uživatele v laravel výmluvné

  3. výběr jedinečných hodnot ze sloupce

  4. Nahrazení System.Data.OracleClient za Oracle.DataAccess (ODP.NET)