Обеспечение того, чтобы движок SQL отсекал части запроса, которые могут быть тривиально отклонены/никогда не оценены [дуPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обеспечение того, чтобы движок SQL отсекал части запроса, которые могут быть тривиально отклонены/никогда не оценены [ду

Сообщение Anonymous »

В PHP, используя MariaDB (а иногда и MySQL), мне часто приходится вставлять части запроса условно на основе, например, выражения условия в PHP:

Код: Выделить всё

    $somecondition = "1";
$statement = $pdo->prepare(
"SELECT
column1
FROM
table
WHERE
...
" .
($somecondition === "1" ? "AND ()" : ""));
Я использую VS Code, и VS Code довольно хорошо выполняет раскраску синтаксиса SQL внутри строк, кроме случаев, когда строка каким-то образом обрезана, как в примере выше, где AND () раскраска синтаксиса не происходит. Для меня это серьезное бремя, так как мои SQL-запросы часто бывают довольно большими.
Чтобы обойти эту проблему, я могу просто написать весь SQL-запрос в одной строке и вставить условие на стороне SQL, вот так:

Код: Выделить всё

    $statement = $pdo->prepare(
"SELECT
column1
FROM
table
WHERE
...
AND
(0={$somecondition} AND ())";
К счастью, линтер VS Code SQL не жалуется на интерполяцию строки {$somecondition и рассматривает ее как немедленное значение. Раскраска синтаксиса работает успешно.
Обратите внимание, что наличие полного SQL-запроса в одной синтаксически правильной строке может быть полезно также для встроенных расширений линтера, привязанных к базе данных, таких как этот.
Мои вопросы:
  • могу ли я быть УВЕРЕН, что механизм SQL обнаружит 0=1 и тривиально никогда не выполнит оценку следующее предложение AND справа? Производительность выполнения SQL-запроса может неожиданно резко упасть, если механизм SQL не обрежет это предложение AND.
  • если нет, что мне делать? Есть ли другой возможный подход?


Подробнее здесь: https://stackoverflow.com/questions/793 ... vially-rej
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»