Какова функция этого ~ * синтаксиса в запросе SQL? - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь понять скрипт для реализации новых функций и опций.Для поиска в таблицах sql они использовали следующий синтаксис

$sqlquery = "SELECT DISTINCT \"Name\", \"FileName\", \"Status\", lower(\"Name\") FROM \"" . $SearchedTable . "\" WHERE ";

$sqlquery=$sqlquery." (\"Name\" ~* '".$text[$i]."' OR \"DNA\" ~* '".$text[$i]."')";
  • Я хотел бы знать, почему они используют \ "Имя \" (я где-то читал, что это как-то связано синъекции sql).
  • Я также не смог найти причину использования этого синтаксиса ~ * вместо =.Или это означает что-то еще?

1 Ответ

0 голосов
/ 12 декабря 2018

Общее примечание. В текущем запросе используется конкатенация строк, поэтому он подвержен внедрению SQL.Лучшим решением для вашей стороны PHP было бы использование подготовленного оператора.

При этом ваш синтаксис SQL выглядит как Postgres, а не MySQL.Вот грубый запрос:

SELECT DISTINCT Name, FileName, Status, lower(Name)
FROM yourTable
WHERE Name ~* ? OR DNA ~* ?;

Оператор ~* в Postgres выполняет сопоставление регулярных выражений без учета регистра.Так, например, чтобы соответствовать любому Name, который начинается с mi, вы можете использовать:

WHERE Name ~* '^mi'

Следовательно, то, что вы должны связывать с двумя заполнителями, - это регулярные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...