romikchef: (Default)
[personal profile] romikchef
Ну-с, вот и посмотрим, что такое аудитория хабра.

Судя по первой реакции, все труды пропадут втуне, причём из-за очень смешной причины: "Я всё и так знаю, поэтому читать не буду".

Date: 2012-08-07 09:24 am (UTC)
From: [identity profile] david-m.livejournal.com
На хабре я могу только раз в час писать, так что напишу тут:)

С пустым массивом дело тёмное. Сама база пустую конструкцию IN() считает ошибкой. По логике, “x IN()” должен быть всегда равен FALSE, но для того, чтобы это заменить на FALSE, надо парсить запрос до “x”, который может быть каким угодно составным.

О!!!!!!!! Вот только что пришло в голову и проверил. Всё же просто. NULL не равен ничему, в том числе и NULL-у. Поэтому IN() можно безболезненно заменять на IN(NULL) — и это даст FALSE всегда.

Но! Массивы могут встречаться не только в IN, но и в VALUES, например.

Date: 2012-08-07 09:53 am (UTC)
From: [identity profile] david-m.livejournal.com
А. Вот IS NULL это проблема, да… Получается, плейсхолдер должен захватывать предыдущий оператор? А ведь есть ещё и IS NOT NULL. Плохо:(

С "hello world" в числовом контексте я бы всё-таки делал проверку на is_int/is_numeric и выдавал бы ошибку если что. Ибо нефиг.

Date: 2012-08-07 10:36 am (UTC)
From: [identity profile] david-m.livejournal.com
Скажем, есть таблица images с полем album_id. Картинка может входить в какой-то альбом (тогда в album_id сидит его id) или не входить (тогда в album_id сидит NULL).

Я хочу сделать фильтрацию по альбомам, причём предусмотреть и вариант «не входит в альбомы». Вот тебе и NULL в запросе из динамического значения.

Date: 2012-08-07 11:49 am (UTC)
From: [identity profile] david-m.livejournal.com
Но котеровский логарифм нуля — это ад, конечно:) Я бы всё-таки сделал какие-нибудь служебные классы и проверял на них. Тогда можно будет ввести много других полезных служебных значений, например, бесконечности (есть в постгресе), значение DEFAULT в INSERT/UPDATE, можно даже NULL передавать не как php-шный null.

Date: 2012-08-08 12:43 pm (UTC)
From: [identity profile] david-m.livejournal.com
Ну не знаю даже… Лучше бы поменьше магии всё-таки, чай не на питоне пишем)

Date: 2012-08-08 12:44 pm (UTC)
From: [identity profile] david-m.livejournal.com
у тебя там на хабре
if (!$data)
{
return NULL;
}

Наверное, правильнее
if (!$data)
{
return 'NULL';
}
?

Date: 2012-08-08 06:43 pm (UTC)
From: [identity profile] david-m.livejournal.com
Ты бы, кстати, заопенсорсил всё это на какой-нибудь гитхаб?

Жаль только, что mysql-евской специфики много. А если у меня постгрес?:)

Date: 2012-08-08 06:48 pm (UTC)
From: [identity profile] david-m.livejournal.com
PDO тут как минимум даёт универсальный драйвер ко всем бэкендам. А плейсходерить можно и поверх него. Правда, возможны какие-то базо-зависимые нюансы синтаксиса…

Date: 2012-08-12 01:27 pm (UTC)
From: [identity profile] david-m.livejournal.com
Вот вопрос у меня. Хочется сделать библиотечку, которая занимается ТОЛЬКО плейсхолдерством. По идее, ей не нужно живое подключение к базе для этого, ибо все правила эскейпинга известны.

На деле же откуда-то возникают какие-то мутные зависимости от текущих кодировок, которые я до конца не понимаю. Но если постулировать, что серверная кодировка у нас одна и единственно правильная — UTF-8 — то можно отвязаться от соединения?

Profile

romikchef: (Default)
(P) All pun intended

February 2026

S M T W T F S
1234567
891011121314
151617181920 21
22232425262728

Style Credit

Page generated Feb. 26th, 2026 02:20 am
Powered by Dreamwidth Studios

Expand Cut Tags

No cut tags