(Untitled)

Dec 12, 2014 23:17

Две фишки про (my)SQL, которые вполне стоит записать ( Read more... )

Leave a comment

zerkms December 12 2014, 21:36:17 UTC
"если $bar пустой" --- что такое пустой? NULL?

Reply

phorror December 12 2014, 21:37:37 UTC
В принципе, конерктное значение неважно. Что напишем в условии - то и будет. В данном случае - пустая строка.
Ты прав, сейчас переформулирую

Reply

zerkms December 12 2014, 21:38:57 UTC
А в чём особенность пустой строки? Почему нельзя сравнивать с пустой строкой?

Reply

phorror December 12 2014, 21:43:50 UTC
Это не особенность строки, это всем известная особенность оператора OR (которая да - не читается, из-за непривычной записи - мы сравниваем строку со строкой, а не с полем :)

Смотри, если передать пустую строку, то получится
('' = '' OR foo = '')
из которого мы всегда получаем единицу, то есть, условно говоря, условие превращается в хрестоматийное 1 = 1 и в итоге трока не усатсвует в сравнении. Красиво же?

Reply

zerkms December 12 2014, 21:45:17 UTC
А, ёмаё, ты там сравниваешь значение с тупо строковым литералом. Ни разу в жизни такого не видел вживую, потому и не заметил.

Но это ты опять - делаешь работу за оптимизатор, который такие вещи выпилит и сам легко.

Reply

phorror December 12 2014, 21:47:19 UTC
Дык! Я и сам сначала не въехал - непривычно, ага. при том что конструкция с OR известная и сто раз юзаная :)

А в итоге получается красивый код для необязательных параметров без геморроя!

Reply

zerkms December 12 2014, 21:49:08 UTC
Хз, я если встречаю что-то странное в коде останавливаюсь и долго думаю, почему автор сделал именно так, подразумевая, что были какие-то объективные причины делать так, а не иначе.

Вот такой запрос меня бы подвешал на минуты.

Reply

phorror December 12 2014, 21:50:34 UTC
Ну, пилить вместо него
if ($foo)
$foopart = $db->parse("AND foo = ?", $foo);
- это еще хуже по-моему

Reply

phorror December 12 2014, 21:48:38 UTC
Погоди, а как он выпилит?
Я же пхп код пишу, и не знаю, какой параметр придет - пустой или полный.
при пустом не надо пропустить, а пори полном - отфильтровать.

Reply

zerkms December 12 2014, 21:50:48 UTC
Ну при выполнении. После парсинга, во время оптимизации.

Reply

phorror December 12 2014, 21:51:41 UTC
Честно - я не понял о чем ты.
Не понимаю, какую работу я делаю за оптимизатор и как мне её не делать

Reply


Leave a comment

Up