sql >> Databasteknik >  >> RDS >> Mysql

Säkerhet för förberedd SQL-sats med REGEX i fråga

Platshållare kan inte citeras. Enkelt är det:

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

Den första är en platshållare och fungerar som förväntat. Den andra testar jämställdhet mot tecknet "frågetecken". Det är inte en platshållare längre.

Och sedan finns det problemet med ? är också en regex-metakaraktär. Om platshållare KAN citeras, då ges

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

skulle det ? vara en frågeplatshållare, eller är det regex "noll-eller-ett"-intervalloperatorn?

Om du vill använda platshållare i regex måste du "bygga" regexmönstret

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

Exakt på samma sätt som du skulle behöva bygga en LIKE mönster:

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



  1. Hur simulerar man mer än 1 begäran (dvs. 4000 eller fler) på en enda sida för att testa prestanda?

  2. Vad är det för fel på min MySQL CASE/NÄR syntax?

  3. Regex str_replace

  4. Hibernate + MySQL + rewriteBatchedStatements=true