Перейти к публикации

Странный баг с MySQL-запросами при использовании микроразметки


Рекомендованные сообщения

Обнаружил очень странную реакцию движка на казалось бы безобидную вещь - микроразметку в новости. При добавлении определённых конструкций в shortstory.tpl происходят запросы к коротким новостям как будто к полным.

Ниже результат долгой работы по поиску этого бага.

Все тесты проводились на свежеустановленной (дефолтные натройки) системе на локалке (OpenServer) на версиях DLE 9.6 и 9.8, а так же на реальном хостинге на версии 9.8.

В итоге удалось вычленить конструкцию вызывающую ошибку в 100% случаев.

Содержимое shortstory.tpl:


<div class="span3">

<h3><b>{views}</b> | <a href="{full-link}" title="{title}">{title}</a></h3>

<hr>

</div>

Лог MySQL:

130408 23:18:11  1106 Connect mysql@127.0.0.1 on dle98

   1106 Query SET NAMES utf8

   1106 Query SET NAMES 'cp1251'

   1106 Query SELECT * FROM dle_users WHERE user_id='1'

   1106 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:18:11' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:18:11' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1106 Query SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE approve=1 AND allow_main=1 AND date < '2013-04-08 23:18:11' ORDER BY fixed desc, date DESC LIMIT 0,10

   1106 Query SELECT COUNT(*) as count FROM dle_post WHERE approve=1 AND allow_main=1 AND date < '2013-04-08 23:18:11'

   1106 Quit

Тепрь добавляем микроразметку: shortstory.tpl

<div class="span3" itemscope itemtype="http://schema.org/Article">

<h3 itemprop="name"><b>{views}</b> | <a itemprop="url" href="{full-link}" title="{title}">{title}</a></h3>

<hr>

</div>

Лог MySQL:

130408 23:06:20  1046 Connect mysql@127.0.0.1 on dle98

   1046 Query SET NAMES utf8

   1046 Query SET NAMES 'cp1251'

   1046 Query SELECT * FROM dle_users WHERE user_id='1'

   1046 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:06:20' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:06:20' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1046 Query SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE approve=1 AND allow_main=1 AND date < '2013-04-08 23:06:20' ORDER BY fixed desc, date DESC LIMIT 0,10

   1046 Query SELECT COUNT(*) as count FROM dle_post WHERE approve=1 AND allow_main=1 AND date < '2013-04-08 23:06:20'

   1046 Quit

130408 23:06:21  1047 Connect mysql@127.0.0.1 on dle98

   1047 Query SET NAMES utf8

   1047 Query SET NAMES 'cp1251'

   1047 Query SELECT * FROM dle_users WHERE user_id='1'

   1047 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:06:21' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:06:21' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1047 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '4'

   1047 Query UPDATE dle_post_extras SET news_read=news_read+1 where news_id='4'

   1047 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('Осуществление технической поддержки скрипта Техническая поддержка скрипта осуществляется силами форума поддержки, а также по E-Mail. По мере поступления возникших у вас вопросов мы стараемся ответить на все ваши вопросы, но в связи с большим количеством посетителей, это не всегда является возможным. Поэтому введена дополнительная услуга платной поддержки скрипта. Стоимость данной услуги составляет дополнительно 19 $ одноразово на весь срок действия лицензии.Услуги по дополнительной поддержки скрипта включают в себя:1. Приоритетное получение ответа на вопросы, которые задают пользователи впервые столкнувшиеся со скриптом и естественно не знающие всех нюансов работы скрипта. В компетенции службы поддержки находится только помощь только по непосредственным сбоям самого скрипта, в случае если причиной некорректной работы скрипта явился ваш шаблон, не соответствующий требованиям скрипта, то в поддержке вам может быть отказано.2. Также вы получаете возможность одноразовой установки скрипта вам на сервер, включая настройку его до полной работоспособности с учетом текущих настроек сервера (иногда нужно верно отключить поддержку ЧПУ, включение специальных директив для Русского Апача, для верной загрузки картинок и прочее...).3. Вы получаете консультационную поддержку по работе со структурой скрипта, например у вас есть желание добавить небольшие изменения в скрипт для более удобной работы для вас, вы сможете сэкономить время на поиске нужного куска кода просто спросив у нас. Вам будет предоставлена консультация где это копать и как вообще лучше реализовать поставленную задачу. (Внимание мы не пишем за вас дополнительные модули, а только помогаем вам лучше разобраться со структурой скрипта, поэтому всегда задавайте вопросы по существу, вопросы типа: \"как мне сделать такую фишку\" могут быть проигнорированы службой поддержки).4. Еще одна из часто возникающих проблем это некорректное обновление скрипта, например во время обновления произошел сбой сервера, часть новых данных была внесена в базу и настройки, часть нет, в итоге вы получаете нерабочий скрипт, со всеми вытекающими последствиями. В данном случае для вас будет проведена ручная коррекция поврежденной структуры базы данных.В случае если вы не являетесь подписчиком дополнительной службы поддержки, ваши вопросы могут быть проигнорированы и оставлены без ответа.С уважением,SoftNews Media Group') AND id != 4 AND approve=1 AND date < '2013-04-08 23:06:21' LIMIT 5

   1047 Quit

   1048 Connect mysql@127.0.0.1 on dle98

   1048 Query SET NAMES utf8

   1048 Query SET NAMES 'cp1251'

   1048 Query SELECT * FROM dle_users WHERE user_id='1'

   1048 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:06:21' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:06:21' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1048 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '3'

   1048 Query UPDATE dle_post_extras SET news_read=news_read+1 where news_id='3'

   1048 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('Шаблоны для DataLife Engine Совместно с нашими партнерами www.dletemplates.com мы рады предложить вам  также высококачественные шаблоны, специально подготовленные для использования под управлением DataLife Engine. Предлагаемые шаблоны созданы на высоком качественном уровне опытными дизайнерами и программистами. Каждый из предлагаемых шаблонов полностью настроен и готов к использованию сразу же после его установки на сервер. Помимо того что все шаблоны уже подготовлены к использованию на портале, вы получаете также все исходные материалы, которые были использованы при создании шаблона.Если вы еще только раздумываете как будет выглядеть ваш сайт и желаете воспользоваться услугами профессионалов по вполне разумным ценам, то мы рекомендуем вам обратиться к нашим партнерам www.dletemplates.com, которые в сжатые строки создадут для вас персональный макет вашего сайта, а также подготовят его непосредственно к работе с движком. Также на сайте оказываются услуги по интеграции уже готового Вашего макета в движок.') AND id != 3 AND approve=1 AND date < '2013-04-08 23:06:21' LIMIT 5

   1048 Quit

   1049 Connect mysql@127.0.0.1 on dle98

   1049 Query SET NAMES utf8

   1049 Query SET NAMES 'cp1251'

   1049 Query SELECT * FROM dle_users WHERE user_id='1'

   1049 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:06:21' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:06:21' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1049 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '1'

   1049 Query UPDATE dle_post_extras SET news_read=news_read+1 where news_id='1'

   1049 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('Добро пожаловать Добро пожаловать на демонстрационную страницу движка DataLife Engine. DataLife Engine это многопользовательский новостной движок, обладающий большими функциональными возможностями. Движок предназначен в первую очередь для создание новостных блогов и сайтов с большим информационным контекстом. Однако он имеет большое количество настроек, которые позволяют использовать его практически для любых целей. Движок может быть интегрирован практически в любой существующий дизайн, и не имеет никаких ограничений по созданию шаблонов для него. Еще одной ключевой особенностью DataLife Engine является низкая нагрузка на системные ресурсы, Даже при очень большой аудитории сайта нагрузка не сервер будет минимальной, и вы не будете испытывать каких-либо проблем с отображением информации. Движок оптимизирован под поисковые системы. Обо всех функциональных особенностях вы сможете прочитать на нашей странице.Обсуждение скрипта по всем вопросам ведется здесь. Так же там Вы сможете получить оперативную помощь.') AND id != 1 AND approve=1 AND date < '2013-04-08 23:06:21' LIMIT 5

   1049 Quit

   1050 Connect mysql@127.0.0.1 on dle98

   1050 Query SET NAMES utf8

   1050 Query SET NAMES 'cp1251'

   1050 Query SELECT * FROM dle_users WHERE user_id='1'

   1050 Query SELECT p.id, p.date, p.short_story, p.xfields, p.title, p.category, p.alt_name FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE p.approve=1 AND p.date >= '2013-04-08 23:06:21' - INTERVAL 1 MONTH AND p.date < '2013-04-08 23:06:21' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10

   1050 Query SELECT * FROM dle_post LEFT JOIN dle_post_extras ON (dle_post.id=dle_post_extras.news_id) WHERE  id = '2'

   1050 Query UPDATE dle_post_extras SET news_read=news_read+1 where news_id='2'

   1050 Query SELECT id, date, short_story, xfields, title, category, alt_name FROM dle_post WHERE MATCH (title, short_story, full_story, xfields) AGAINST ('Приобретение и оплата скрипта Уважаемые вебмастера хотим для вас сделать небольшое дополнение. Прежде чем обратиться с каким-либо вопросом в службу поддержки скрипта, убедитесь что вы тщательно прочитали документацию по скрипту и не нашли там для вас необходимого ответа. Мы оставляем за собой право игнорировать вопросы, поступившие к нам от пользователей, использующих некоммерческую версию скрипта или не оплативших лицензию, включающую в себя службу технической поддержки. Вы можете приобрести один из двух типов лицензии на DataLife Engine по вашему желанию:- Базовая лицензия. Стоимость данной лицензии составляет: 59$. При приобретении данной лицензии вы также получаете возможность получения бесплатно новых версий скрипта в течении одного года.- Расширенная лицензия. Стоимость данной лицензии составляет: 78$. При приобретении данной лицензии вы получаете все что входит в базовую лицензию, а также дополнительно входит служба технической поддержки скрипта и разрешение на снятие копирайтов на скрипт с пользовательской части (видимой для обычных посетителей сайта).Срок действия лицензии составляет 1 год, в течении которого вы бесплатно будете получать все последующие версии скрипта и обновления, а в случае приобретения расширенной лицензии, и тех. поддержку. После окончания срока лицензии вы можете ее продлить, либо использовать пожизненно бесплатно актуальную на тот момент времени версию скрипта. В случае если вы захотите продлить лицензию для получения новых версий скрипта, то стоимость продления лицензии на год, составляет 39$Как оплатить скрипт вы можете прочитать на http://dle-news.ru/price.htmlПомните что лицензия выдается только на один домен (проект) и не может использоваться на других сайтах, а также запрещена передача вашего файла лицензии третьим лицам.С уважением,SoftNews Media Group') AND id != 2 AND approve=1 AND date < '2013-04-08 23:06:21' LIMIT 5

   1050 Quit

Т.е. видно, что к каждой краткой новости выполняется запрос как при просмотре полной новости.

Как такое может происходить и почему - без понятия, но хочется скорейшего решения проблемы исключая отказ от использования микроразметки.

Микроразметка приведённого кода правильная

Изменено пользователем ПафНутиЙ
Ссылка на сообщение
Поделиться на других сайтах

Как оказалось - это из-за расширения дла браузера.

Вопрос закрыт.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...