sql >> Database teknologi >  >> RDS >> Mysql

Sikkerhed for forberedt SQL-sætning med REGEX i forespørgsel

Pladsholdere kan ikke citeres. Så simpelt som det:

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

Den første er en pladsholder og fungerer som forventet. Den anden tester for lighed i forhold til tegnet "spørgsmålstegn". Det er ikke længere en pladsholder.

Og så er der problemet med ? er også et regex-metategn. Hvis pladsholdere KUNNE citeres, så givet

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

ville det ? være en forespørgselspladsholder, eller er det regex "nul-eller-en"-områdeoperatoren?

Hvis du vil bruge pladsholdere i regex, skal du "bygge" regex-mønsteret

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

Præcis på samme måde som du skulle bygge en LIKE mønster:

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



  1. Hvordan øges automatisk i PostgreSQL?

  2. Forskellen mellem =og :=i MySQL

  3. PID fejl på mysql.server start?

  4. Hvad kræver dette JavaScript?