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

Помогите решить проблему с ошибкой MySQL


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

Уважаемые.

После обновления с 8.0 до 8.3 появилась следующая ошибка в некоторых местах сайта. Точнее на некоторых страницах сторонних модулей. Одна и та же ошибка в разных, абсолютно не свазанных модулей, такие как репутация пользователей, или DLE Forum.


Unknown column 'detected' in 'where clause'


Error Number:

1054


SELECT * FROM dle_post WHERE approve='1' AND category IN(not detected) AND id NOT IN (1146198840,1146200908,1146200861,1146203183)  AND date >= '2009-11-17 14:05:29' - INTERVAL 90 DAY AND date < '2009-11-17 14:05:29'  AND (short_story regexp '(thumbs|src=)' OR xfields regexp '(thumbs|src=)') ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,11

Как быть? Что делать? :)

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

Такого запроса в оригинальном коде скрипта нет, видимо это у вас от сторонних модулей.

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

Так а я о чем говорю, это не только в каком-то конкретном модуле, а во всех, которые не относятся к дле. Модули абсолютно разные и от разных разработчиков, а ошибка везде одна.

Прошу помочь исключительно опираясь на эту ошибку, на что именно ругается?

Меня смущает особенно: AND category IN(not detected)

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

Cent,

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

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

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

Я нашел файл модуля, который вызывает эту ошибку, но связаться с автором я так и не смог.

Помогите решить проблему и найти ошибку в этом файле модуля.

Вот код:

<?php


if(!defined('DATALIFEENGINE'))

{

  die("Hacking attempt!");

}


require_once(ENGINE_DIR.'/data/config.top10.php');

$san_top10=unserialize($san_dbt);


if ($san_top10[10]=="RAND()") clear_cache("top10news");

if (!$tpl->result['top10news']) {


$shab = '#src=\"http:.{30,100}(\.jpg|\.jpeg|\.gif|\.png)#i';


$now = date ('Y-m-d H:i:s', $_TIME);

$imgs="";

if (isset($san_top10[6]))

$imgs=" AND (short_story regexp '(thumbs|src=)' OR xfields regexp '(thumbs|src=)')";

$datag=" AND date >= '$now' - INTERVAL ".$san_top10[3]." DAY AND date < '$now'";

if ($san_top10[3]==0) $datag="";


//Раскомментируй текст ниже (удали /* и */) если хочешь чтоб модуль вибирал новости только из категории, в которой находится юзер.


if ($category_id) $san_top10[8]=$category_id; 


if (!isset($san_top10[0]))

  $sql = $db->query("SELECT * FROM " . PREFIX . "_post WHERE approve='1' AND category IN($san_top10[8]) AND id NOT IN ($san_top10[9]) $datag $imgs ORDER BY $san_top10[10] LIMIT 0,$san_top10[4]");

else

  $sql = $db->query("SELECT * FROM " . PREFIX . "_post WHERE approve='1' AND category IN($san_top10[8]) AND id NOT IN ($san_top10[9]) $imgs ORDER BY date DESC LIMIT 0,$san_top10[4]");


while ($row = $db->get_row($sql)) {


$row['category'] = intval ($row['category']);

$row['date'] = strtotime($row['date']);

if ($config['allow_alt_url'] == "yes") {

	if ($row['flag'] AND $config['seo_type']) {

		if ($row['category'] AND $config['seo_type'] == 2) {

			$full_link = $config['http_home_url'].get_url($row['category'])."/".$row['id']."-".$row['alt_name'].".html";

		} else {

			$full_link = $config['http_home_url'].$row['id']."-".$row['alt_name'].".html";

		}

	} else {

		$full_link = $config['http_home_url'].date('Y/m/d/', $row['date']).$row['alt_name'].".html";

	}

} else {

	$full_link = $config['http_home_url']."index.php?newsid=".$row['id'];

}


preg_match($shab, $row['short_story'], $image);

$image=substr($image[0],5);

if ($image=='') 

{

preg_match($shab, $row['xfields'], $image);

$image=substr($image[0],5);

}


preg_match_all($shab, $row['full_story'], $imag);

$src1=substr($imag[0][0],5);

$src2=substr($imag[0][1],5);

$src3=substr($imag[0][2],5);

$src4=substr($imag[0][3],5);

$src5=substr($imag[0][4],5);


if ($image=='') $image="{THEME}/images/".$san_top10[7];

if ($row['rating']==0) $row['rating']=1;

if ($row['vote_num']=='0') $row['vote_num']=1;

$row['title']=preg_replace("/'/","`",$row['title']);

$row['title']=preg_replace('/"/',"&quot",$row['title']);

$rate='Рейтинг: <b>'.round($row['rating']/($row['vote_num']),2).'</b>';

$read='Просмотрело: <b>'.$row['news_read'].'</b> чел.';


if (!$row['category']) { $my_cat = "---"; $my_cat_link = "---";} else {

	$my_cat = array (); $my_cat_link = array ();

	$cat_list = explode (',', $row['category']);

	if (count($cat_list) == 1) {

		$my_cat[] = $cat_info[$cat_list[0]]['name'];

		$my_cat_link = get_categories ($cat_list[0]);

	} else {


		foreach ($cat_list as $element) {

			if ($element) { $my_cat[] = $cat_info[$element]['name']; if ($config['ajax']) $go_page = "onclick=\"DlePage('do=cat&category={$cat_info[$element]['alt_name']}'); return false;\" "; else $go_page = "";

					if ($config['allow_alt_url'] == "yes")

							$my_cat_link[] = "<a {$go_page}href=\"".$config['http_home_url'].get_url($element)."/\">{$cat_info[$element]['name']}</a>";

					else

							$my_cat_link[] = "<a {$go_page}href=\"$PHP_SELF?do=cat&category={$cat_info[$element]['alt_name']}\">{$cat_info[$element]['name']}</a>";

			}

		}

	$my_cat_link = implode (', ', $my_cat_link);

       }

	$my_cat = implode (', ', $my_cat);

}


$tpl->load_template('top10_blog.tpl');

$tpl->set('{category}', $my_cat);

$tpl->set('{title_cut}', substr($row['title'],0,$san_top10[1]));

$tpl->set('{title}', substr($row['title'],0,$san_top10[2]));

$tpl->set('{href}', $full_link);

$tpl->set('{image}', $image);

$tpl->set('{scr1}', $src1);

$tpl->set('{scr2}', $src2);

$tpl->set('{scr3}', $src3);

$tpl->set('{scr4}', $src4);

$tpl->set('{scr5}', $src5);

$tpl->set('{rate}', $rate);

$tpl->set('{news_read}', $read);

$tpl->set('{descr}', $row['descr']);

$tpl->set('{newline}', $nline);

$tpl->compile('top10news');

$tpl->clear();

}

$db->free();

}

?>

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

Навскидку:

Надо знать что лежит в массиве "$san_top10", для этого как минимум нужно видеть файл '/data/config.top10.php'

ЗЫ: В строке скульного запроса вот это: "category IN(not detected)" является ошибкой. Судя по логике ХАКа не определилась категория из которой надо делать выборку.

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

Содержание файла config.top10.php достаточно странное, но тем не менее:

<?php $san_dbt='a:9:{i:1;s:2:"15";i:2;s:2:"50";i:3;s:2:"90";i:4;s:2:"11";i:6;i:1;i:7;s:12:"noavatar.png";i:8;s:77:"3,4,15,5,8,53,58,59,60,61,62,63,70,64,65,66,72,67,68,69,10,11,7,6,35,40,55,14";i:9;s:43:"1146198840,1146200908,1146200861,1146203183";i:10;s:53:"rating DESC, comm_num DESC, news_read DESC, date DESC";}' ?>

Коротко опишу суть модуля. Он выводит на страницах сайтов ТОП10 в виде уменьшенных картинок. В каждом разделе - свой топ. На главной - топ со всех разделов.

А возникает эта ошибка совсем в других местах, например при попытке открыть форум (DLE-FORUM) или страницу истории изменения репутаций пользователя, в модуле репутаций.

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

Вот что лежит в массиве "$san_top10"

1=>15

2=>50

3=>90

4=>11

6=>1

7=>noavatar.png

8=>3,4,15,5,8,53,58,59,60,61,62,63,70,64,65,66,72,67,68,69,10,11,7,6,35,40,55,14

9=>1146198840,1146200908,1146200861,1146203183

10=>rating DESC, comm_num DESC, news_read DESC, date DESC

Т.е. $san_top10[8] = "3,4,15,5,8,53,58,59,60,61,62,63,70,64,65,66,72,67,68,69,10,11,7,6,35,40,55,14"

Почему у в запрос попадает "not detected" - я х.з. Возможно config.top10.php перезаписывается каждый раз при обновлении страницы, тогда надо уже смотреть как формируется этот конфиг.

За 2 минуты это не решается. Надо смотреть на конкретном примере с исходниками. Наводки куда копать - я дал.

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

if ($category_id) $san_top10[8]=$category_id;

замените на

if ($category_id && $category_id != 'not detected') $san_top10[8]=$category_id;

Одна и та же ошибка в разных, абсолютно не свазанных модулей, такие как репутация пользователей, или DLE Forum.

Ну вообще по всей логике ошибка должна появлятся при просмотре категорий. Может конечно и в этих модулях использована переменная не верно, но скорее всего первое.

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

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

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

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

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

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

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

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

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

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