Это не особенность строки, это всем известная особенность оператора OR (которая да - не читается, из-за непривычной записи - мы сравниваем строку со строкой, а не с полем :)
Смотри, если передать пустую строку, то получится ('' = '' OR foo = '') из которого мы всегда получаем единицу, то есть, условно говоря, условие превращается в хрестоматийное 1 = 1 и в итоге трока не усатсвует в сравнении. Красиво же?
Хз, я если встречаю что-то странное в коде останавливаюсь и долго думаю, почему автор сделал именно так, подразумевая, что были какие-то объективные причины делать так, а не иначе.
Погоди, а как он выпилит? Я же пхп код пишу, и не знаю, какой параметр придет - пустой или полный. при пустом не надо пропустить, а пори полном - отфильтровать.
Reply
Ты прав, сейчас переформулирую
Reply
Reply
Смотри, если передать пустую строку, то получится
('' = '' OR foo = '')
из которого мы всегда получаем единицу, то есть, условно говоря, условие превращается в хрестоматийное 1 = 1 и в итоге трока не усатсвует в сравнении. Красиво же?
Reply
Но это ты опять - делаешь работу за оптимизатор, который такие вещи выпилит и сам легко.
Reply
А в итоге получается красивый код для необязательных параметров без геморроя!
Reply
Вот такой запрос меня бы подвешал на минуты.
Reply
if ($foo)
$foopart = $db->parse("AND foo = ?", $foo);
- это еще хуже по-моему
Reply
Я же пхп код пишу, и не знаю, какой параметр придет - пустой или полный.
при пустом не надо пропустить, а пори полном - отфильтровать.
Reply
Reply
Не понимаю, какую работу я делаю за оптимизатор и как мне её не делать
Reply
Leave a comment