parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

О, тот самый случай про пустой SQL-хеш подвернулся. Что не так?

Василий М. 18.04.2016 14:06

Привожу всё вокруг, весь кусок.

Здесь из базы выбирается один из подходящих рекламных баннеров.
# adrules - это таблица с правилами реклам. Забираем нужные цифры (*)
^adrules.menu{^if($adrules.type eq "journal"){$lim1($adrules.watchlimit)$lim2($adrules.clicklimit)}}
# идём в базу, забираем оба подходящих варианта (**)
^connect[mysql://login:pass@localhost/base_ads?charset=cp1251]{
$jours[^table::sql{SELECT * FROM `banners` WHERE `type` like "journal" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like "journal" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like "journal" AND `moderated` > 1 AND `end` <= "CURRENT_TIMESTAMP"}]
}
# тупо считаем их.
$jourstotal(0)
^jours.menu{$jourstotal($jourstotal + 1)}
# рандомим.
$thisjour(^math:random($jourstotal))
# идём за выбранным (***).
^connect[mysql://login:pass@localhost/base_ads?charset=cp1251]{
$getajour[^hash::sql{SELECT * FROM `banners` WHERE `type` like "journal" AND `moderated` > 1 AND `watched` <= $lim1 OR `type` like "journal" AND `moderated` > 1 AND `clicked` <= $lim2 OR `type` like "journal" AND `moderated` > 1 AND `end` <= "CURRENT_TIMESTAMP" LIMIT ${thisjour},1}]
# да, я задумал такие правила, либо-либо-либо, всё верно. инкрементируем просмотры выбранного
$setwatched($getajour.watched)
$setwatched($setwatched + 1)
^void:sql{UPDATE `base_ads`.`banners` SET `watched` = $setwatched WHERE `id` = '$getajour.id'}
}
# создаём индексик в обработчной директории /ads/айдибаннера/
$bwa[^^before[]^^within[]^^after[]]
^if(-f "/ads/${getajour.id}/index.html"){}{^bwa.save[/ads/${getajour.id}/index.html]}
# пишем код. ссылка и картинка - из хеша.
<a href="/ads/${getajour.id}/" rel="nofollow" id="journal" style="background-image: url($getajour.image)^; background-position: top left^; background-size: contain^; background-repeat: no-repeat^;"></a>
# и - вау! - ни фига.
В результате получаем на месте баннера фиг со ссылкой на /ads//. Не ошибку какую-нибудь там про SQL-syntax, отсутствие столбца и так далее, а просто большой русский фиг!

Хеш тупо пуст во всех столбах.

Подстановками разных штук внутрь баннерной ссылки видим, что (*) - цифры-лимиты подсасываются отлично.
(**) - На всякий проверяем через муадмин - нормик, получаем два варианта, как и должно быть.
(***) - подстановками внутрь ссылки проверяем прямо через браузер: ну да, либо лимит 0,1, либо лимит 1,1, всё верно! Проверяем через муадмин - запрос хороший, выдаёт одну строку.

Но, бабушку его, href и background-image пустые!

Занёс руку над уже привычной заменой ^hash на ^table + menu, или над цикл стрингов под всё... но мне предлагалось этого не делать.

Что не так в запросе хеша $getajour, если SQL код валидный и проверенно результативный?!