Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Bezpieczeństwo dla przygotowanej instrukcji SQL z REGEX w zapytaniu

Nie można cytować symboli zastępczych. To proste:

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

Pierwszy z nich jest symbolem zastępczym i działa zgodnie z oczekiwaniami. Drugi to test na równość ze znakiem zapytania. To już nie jest symbol zastępczy.

A potem pojawia się problem ? będąc również metaznakiem wyrażeń regularnych. Jeśli symbole zastępcze MOGĄ być cytowane, należy podać

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

czy to ? być symbolem zastępczym zapytania, czy jest to operator zakresu regex „zero lub jeden”?

Jeśli chcesz używać symboli zastępczych w wyrażeniach regularnych, musisz "zbudować" wzorzec regex

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

Dokładnie w taki sam sposób, w jaki musiałbyś zbudować LIKE wzór:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Relacja rodzic-dziecko z pojedynczą jednostką w doktrynie 2

  2. Wyniki zapytania mysql z funkcją GROUP BY

  3. Który silnik bazy danych MySQL jest lepszy do przechowywania sesji i danych sesji:MyISAM czy InnoDB?

  4. Jak sprawdzić poprawność zapytania MySQL bez jego wykonywania?

  5. Formularz nie zapisuje się w bazie danych