Ошибка базы данных

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Booker
phpBB 2.0.7a
Сообщения: 627
Стаж: 15 лет 3 месяца
Благодарил (а): 165 раз
Поблагодарили: 21 раз

Ошибка базы данных

Сообщение Booker »

При попытке удаления пользователя вылезает такая ошибка:

Код: Выделить всё

Общая ошибка
SQL ERROR [ mysqli ]
 [0]
SQL
No values specified for SQL IN comparison

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/includes/db/dbal.php
LINE: 757
CALL: trigger_error()

FILE: [ROOT]/includes/db/dbal.php
LINE: 432
CALL: dbal->sql_error()

FILE: [ROOT]/includes/functions_user.php
LINE: 540
CALL: dbal->sql_in_set()

FILE: [ROOT]/includes/acp/acp_users.php
LINE: 198
CALL: user_delete()

FILE: [ROOT]/includes/functions_module.php
LINE: 507
CALL: acp_users->main()

FILE: [ROOT]/adm/index.php
LINE: 74
CALL: p_master->load_active()
Тем не менее пользователь успешно удаляется. С какого момента началось, неясно, обнаружилось случайно. Есть ли возможность определить, в чём проблема, не копая поочерёдно все установленные моды (их много)?
Последний раз редактировалось Sheer 15.12.2012 14:37, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Ошибка базы данных

Сообщение Палыч »

Booker писал(а):FILE: [ROOT]/includes/functions_user.php
LINE: 540
CALL: dbal->sql_in_set()
строка 540 +\- 10 строк
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Booker
phpBB 2.0.7a
Сообщения: 627
Стаж: 15 лет 3 месяца
Благодарил (а): 165 раз
Поблагодарили: 21 раз

Re: Ошибка базы данных

Сообщение Booker »

Код: Выделить всё

// Change user_id to anonymous for this users triggered events
	$sql = 'UPDATE ' . LOG_TABLE . '
		SET user_id = ' . ANONYMOUS . '
		WHERE user_id = ' . $user_id;
	$db->sql_query($sql);

	// Delete the user_id from the zebra table
	$sql = 'DELETE FROM ' . ZEBRA_TABLE . '
		WHERE user_id = ' . $user_id . '
			OR zebra_id = ' . $user_id;
	$db->sql_query($sql);

	// Change unban list related warnings type
		$warning_list = array();
		$sql = 'SELECT w.warning_id FROM ' . WARNINGS_TABLE . ' w, ' . BANLIST_TABLE . ' b 
					WHERE w.warning_end = b.ban_end
						AND ' . $db->sql_in_set('b.ban_id', $unban_sql);
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			$warning_list[] = $row['warning_id'];
		}
		$db->sql_freeresult($result);

		if(sizeof($warning_list))
		{
			$sql = 'UPDATE ' . WARNINGS_TABLE . ' SET warning_type = ' . WARNING . ' 
						WHERE ' . $db->sql_in_set('warning_id', $warning_list);
			$db->sql_query($sql);
			$cache->destroy('sql', WARNINGS_TABLE);
		}
Добавлено спустя 55 секунд:
540 строка эта:

Код: Выделить всё

AND ' . $db->sql_in_set('b.ban_id', $unban_sql);
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Ошибка базы данных

Сообщение Палыч »

Booker писал(а):Есть ли возможность определить, в чём проблема, не копая поочерёдно все установленные моды
Вы, вообще-то, уже знаете ответ: какой-то мод связанный с баном
Честно говоря, не понимаю, как вообще работает эта выборка
Booker писал(а):

Код: Выделить всё

$sql = 'SELECT w.warning_id FROM ' . WARNINGS_TABLE . ' w, ' . BANLIST_TABLE . ' b 
					WHERE w.warning_end = b.ban_end
						AND ' . $db->sql_in_set('b.ban_id', $unban_sql);
Получается, что значение ban_id не определено, о чем, собственно, и сообщение об ошибке
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
Djeday
phpBB 2.0.7a
Сообщения: 644
Стаж: 14 лет 8 месяцев
Благодарил (а): 108 раз
Поблагодарили: 68 раз

Re: Ошибка базы данных

Сообщение Djeday »

Палыч писал(а):Получается, что значение ban_id не определено, о чем, собственно, и сообщение об ошибке
А проблему удалось решить?
Я смею то, что можно человеку, кто смеет меньше - тот не человек.
Booker
phpBB 2.0.7a
Сообщения: 627
Стаж: 15 лет 3 месяца
Благодарил (а): 165 раз
Поблагодарили: 21 раз

Re: Ошибка базы данных

Сообщение Booker »

Мне пока не удалось. По всей видимости виноват Advanced warnings for phpBB3
Проверил установку, всё вроде правильно.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Ошибка базы данных

Сообщение Палыч »

Booker
Этот мод в стадии DEV
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Booker
phpBB 2.0.7a
Сообщения: 627
Стаж: 15 лет 3 месяца
Благодарил (а): 165 раз
Поблагодарили: 21 раз

Re: Ошибка базы данных

Сообщение Booker »

Я понимаю, но вроде никто больше о такой ошибке не упоминал. Видимо ни у кого больше её не было.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Ошибка базы данных

Сообщение Pazh »

Проверяйте установку мода. Вот у меня этот мод стоит:

Код: Выделить всё

/**
* Unban User
*/
function user_unban($mode, $ban)
{
	global $db, $user, $auth, $cache;

	// Delete stale bans
	$sql = 'DELETE FROM ' . BANLIST_TABLE . '
		WHERE ban_end < ' . time() . '
			AND ban_end <> 0';
	$db->sql_query($sql);

	if (!is_array($ban))
	{
		$ban = array($ban);
	}

	$unban_sql = array_map('intval', $ban);

	if (sizeof($unban_sql))
	{
		// Grab details of bans for logging information later
		switch ($mode)
		{
			case 'user':
				$sql = 'SELECT u.username AS unban_info, u.user_id
					FROM ' . USERS_TABLE . ' u, ' . BANLIST_TABLE . ' b
					WHERE ' . $db->sql_in_set('b.ban_id', $unban_sql) . '
						AND u.user_id = b.ban_userid';
			break;

			case 'email':
				$sql = 'SELECT ban_email AS unban_info
					FROM ' . BANLIST_TABLE . '
					WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
			break;

			case 'ip':
				$sql = 'SELECT ban_ip AS unban_info
					FROM ' . BANLIST_TABLE . '
					WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
			break;
		}
		$result = $db->sql_query($sql);

		$l_unban_list = '';
		$user_ids_ary = array();
		while ($row = $db->sql_fetchrow($result))
		{
			$l_unban_list .= (($l_unban_list != '') ? ', ' : '') . $row['unban_info'];
			if ($mode == 'user')
			{
				$user_ids_ary[] = $row['user_id'];
			}
		}
		$db->sql_freeresult($result);
		
		//Pazh WarningList
		// Change unban list related warnings type
		$warning_list = array();
		$sql = 'SELECT w.warning_id FROM ' . WARNINGS_TABLE . ' w, ' . BANLIST_TABLE . ' b 
					WHERE w.warning_end = b.ban_end
						AND ' . $db->sql_in_set('b.ban_id', $unban_sql);
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			$warning_list[] = $row['warning_id'];
		}
		$db->sql_freeresult($result);

		if(sizeof($warning_list))
		{
			$sql = 'UPDATE ' . WARNINGS_TABLE . ' SET warning_type = ' . WARNING . ' 
						WHERE ' . $db->sql_in_set('warning_id', $warning_list);
			$db->sql_query($sql);
			$cache->destroy('sql', WARNINGS_TABLE);
		}
		//--Pazh WarningList

		$sql = 'DELETE FROM ' . BANLIST_TABLE . '
			WHERE ' . $db->sql_in_set('ban_id', $unban_sql);
		$db->sql_query($sql);

		// Add to moderator log, admin log and user notes
		add_log('admin', 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
		add_log('mod', 0, 0, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
		if ($mode == 'user')
		{
			foreach ($user_ids_ary as $user_id)
			{
				add_log('user', $user_id, 'LOG_UNBAN_' . strtoupper($mode), $l_unban_list);
			}
		}
	}

	$cache->destroy('sql', BANLIST_TABLE);

	return false;
}
Помощь в ЛС/email только за WM или ЮMoney
Booker
phpBB 2.0.7a
Сообщения: 627
Стаж: 15 лет 3 месяца
Благодарил (а): 165 раз
Поблагодарили: 21 раз

Re: Ошибка базы данных

Сообщение Booker »

Благодарю.
Проблема решена, оказалось следующее. В инструкции по установке:

Найти:

Код: Выделить всё

\$sql = 'DELETE FROM ' . BANLIST_TABLE . '
Добавить перед ней:

Код: Выделить всё

// Change unban list related warnings type
		$warning_list = array();
		$sql = 'SELECT w.warning_id FROM ' . WARNINGS_TABLE . ' w, ' . BANLIST_TABLE . ' b 
					WHERE w.warning_end = b.ban_end
						AND ' . $db->sql_in_set('b.ban_id', $unban_sql);
		$result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($result))
		{
			$warning_list[] = $row['warning_id'];
		}
		$db->sql_freeresult($result);

		if(sizeof($warning_list))
		{
			$sql = 'UPDATE ' . WARNINGS_TABLE . ' SET warning_type = ' . WARNING . ' 
						WHERE ' . $db->sql_in_set('warning_id', $warning_list);
			$db->sql_query($sql);
			$cache->destroy('sql', WARNINGS_TABLE);
		}
Так вот строк

Код: Выделить всё

\$sql = 'DELETE FROM ' . BANLIST_TABLE . '
в коде пять штук. В инструкции ничего не сказано, поэтому я добавил нужное перед той такой строкой, которая встречается первой. А надо было перед последней.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Ошибка базы данных

Сообщение rxu »

Если устанавливать моды по инструкции, такого быть не может.
Есть предыдущий шаг, если начинаете искать данное вхождение именно с того места в файле, которое правилось на предыдущем шаге, всё устанавливается правильно.
Так что - дело вовсе не в бобине.
Изображение
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Ошибка базы данных

Сообщение Pazh »

rxu писал(а):Так что - дело вовсе не в бобине.
Я тоже так сначала подумал, НО здесь ты немного не прав -
1. там всего одна вставка в файл includes/functions_user.php
2. похоже с выходом новой версии phpbb там действительно добавилась еще одна строка с $sql = 'DELETE FROM ' . BANLIST_TABLE . ', причем перед той куда нужно вставить код мода, отличие от искомой только в том что в новой строке есть еще один tab в начале, но кто это не заметил может проскочить и получить такой трабл (поиску не мешает найти именно ее самой первой и как раз по инструкции установки модов туда и надо вставить код мода). Так что надо наверно для однозначности поменять условие поиска в моде Advanced warnings for phpBB3
Помощь в ЛС/email только за WM или ЮMoney

Вернуться в «Поддержка phpBB 3.0.х»