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