Перейти к контенту
  • 0

RU версия. Внедренная функция sql_set_collation_and_cp()


Вопрос

Недавно просматривая структуру движка IPB 2.3 (by IBR) - я невольно наткнулся на одну функцию для mysql ... sql_set_collation_and_cp()

 

Я так полагаю, что данная функция входит дишь в РУ релиз как собственная модификация от IBR, ибо в официальном IPB релизе - данной функции нет.

 

function sql_set_collation_and_cp()
{
	$this->sql_get_version();

	if ( $this->mysql_version >= 40101 )
	{
		$res = mysqli_query( $this->connection_id, "SHOW CHARSET LIKE '" . $this->obj['mysql_codepage']  .  "'");

		$charset = mysqli_fetch_row($res);

		mysqli_query( $this->connection_id, "SET NAMES " . $this->obj['mysql_codepage'] );
		mysqli_query( $this->connection_id, "SET CHARACTER SET " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET character_set_connection = " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET collation_connection = " . $charset[2] );
	}

	return TRUE;
}

 

Как видно - по назначению данной Addon функции - она выполняет тяжкое действие... а именно избавляет от чужеродных элементов *мутированной кириллицы*, которая - зачастую принимает вид отображения - ????????????? ??? ??? ???? ?????? ??? ??? ??????????? ??? ??............

Лечить то функция лечит и справляется с задачей, но сама функция не *мила*... по причине лишних и неоправданных обращений к mysqli_query.

На старте запуска форума - функция делает 5 лишних обращений к ДБ.

Эти обращения конечно не идут в общий ($this->query_count++) и не учитываются в суммарно выдаваемый счетчик запросов ДБ и в листинг Debug... посему до этого я их не замечал...

 

Для себя я данную функцию *погасил*, ибо траблов с кириллицей у меня нет... но решение внутри функции мне не нравится...

Если у меня альтернативные предложения? - нет. пока нет.

 

Если есть альтернативные идеи у Вас. Велкам.

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

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

  • 0
Недавно просматривая структуру движка IPB 2.3 (by IBR) - я невольно наткнулся на одну функцию для mysql ... sql_set_collation_and_cp()

 

Я так полагаю, что данная функция входит дишь в РУ релиз как собственная модификация от IBR, ибо в официальном IPB релизе - данной функции нет.

 

function sql_set_collation_and_cp()
{
	$this->sql_get_version();

	if ( $this->mysql_version >= 40101 )
	{
		$res = mysqli_query( $this->connection_id, "SHOW CHARSET LIKE '" . $this->obj['mysql_codepage']  .  "'");

		$charset = mysqli_fetch_row($res);

		mysqli_query( $this->connection_id, "SET NAMES " . $this->obj['mysql_codepage'] );
		mysqli_query( $this->connection_id, "SET CHARACTER SET " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET character_set_connection = " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET collation_connection = " . $charset[2] );
	}

	return TRUE;
}

 

Как видно - по назначению данной Addon функции - она выполняет тяжкое действие... а именно избавляет от чужеродных элементов *мутированной кириллицы*, которая - зачастую принимает вид отображения - ????????????? ??? ??? ???? ?????? ??? ??? ??????????? ??? ??............

Лечить то функция лечит и справляется с задачей, но сама функция не *мила*... по причине лишних и неоправданных обращений к mysqli_query.

На старте запуска форума - функция делает 5 лишних обращений к ДБ.

Эти обращения конечно не идут в общий ($this->query_count++) и не учитываются в суммарно выдаваемый счетчик запросов ДБ и в листинг Debug... посему до этого я их не замечал...

 

Для себя я данную функцию *погасил*, ибо траблов с кириллицей у меня нет... но решение внутри функции мне не нравится...

Если у меня альтернативные предложения? - нет. пока нет.

 

Если есть альтернативные идеи у Вас. Велкам.

есть конечно. в старых версиях я использовал свой вариант, в новых он будет выглядеть так:

function sql_set_collation_and_cp() {
if (mysql_get_server_info()>"4.1") {
	mysql_unbuffered_query("SET NAMES " . $this->obj['mysql_codepage']);
}
return true;
}

это по максимуму упростит и оптимизирует приведенное выше действие.

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

  • 0
Недавно просматривая структуру движка IPB 2.3 (by IBR) - я невольно наткнулся на одну функцию для mysql ... sql_set_collation_and_cp()

 

Я так полагаю, что данная функция входит дишь в РУ релиз как собственная модификация от IBR, ибо в официальном IPB релизе - данной функции нет.

 

function sql_set_collation_and_cp()
{
	$this->sql_get_version();

	if ( $this->mysql_version >= 40101 )
	{
		$res = mysqli_query( $this->connection_id, "SHOW CHARSET LIKE '" . $this->obj['mysql_codepage']  .  "'");

		$charset = mysqli_fetch_row($res);

		mysqli_query( $this->connection_id, "SET NAMES " . $this->obj['mysql_codepage'] );
		mysqli_query( $this->connection_id, "SET CHARACTER SET " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET character_set_connection = " . $this->obj['mysql_codepage'] );	  
		mysqli_query( $this->connection_id, "SET collation_connection = " . $charset[2] );
	}

	return TRUE;
}

 

Как видно - по назначению данной Addon функции - она выполняет тяжкое действие... а именно избавляет от чужеродных элементов *мутированной кириллицы*, которая - зачастую принимает вид отображения - ????????????? ??? ??? ???? ?????? ??? ??? ??????????? ??? ??............

Лечить то функция лечит и справляется с задачей, но сама функция не *мила*... по причине лишних и неоправданных обращений к mysqli_query.

На старте запуска форума - функция делает 5 лишних обращений к ДБ.

Эти обращения конечно не идут в общий ($this->query_count++) и не учитываются в суммарно выдаваемый счетчик запросов ДБ и в листинг Debug... посему до этого я их не замечал...

 

Для себя я данную функцию *погасил*, ибо траблов с кириллицей у меня нет... но решение внутри функции мне не нравится...

Если у меня альтернативные предложения? - нет. пока нет.

 

Если есть альтернативные идеи у Вас. Велкам.

есть конечно. в старых версиях я использовал свой вариант, в новых он будет выглядеть так:

function sql_set_collation_and_cp() {
if (mysql_get_server_info()>"4.1") {
	mysql_unbuffered_query("SET NAMES " . $this->obj['mysql_codepage']);
}
return true;
}

это по максимуму упростит и оптимизирует приведенное выше действие.

 

Вы очень невнимательны.

Ваше решение актуально для устаревшего расширения — mysql. С расширением mysqli сие работать не будет.

Мало ли народ сейчас побежит себе копи-пастить...

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

  • 0
Вы очень невнимательны.

Ваше решение актуально для устаревшего расширения — mysql. С расширением mysqli сие работать не будет.

Мало ли народ сейчас побежит себе копи-пастить...

это с каких пор расширение mysql у нас устаревшее?

не вижу никакой проблемы использовать эту же конструкцию для mysqli.

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

  • 0
есть конечно. в старых версиях я использовал свой вариант, в новых он будет выглядеть так:

function sql_set_collation_and_cp() {
if (mysql_get_server_info()>"4.1") {
	mysql_unbuffered_query("SET NAMES " . $this->obj['mysql_codepage']);
}
return true;
}

это по максимуму упростит и оптимизирует приведенное выше действие.

 

Интересное решение...

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

  • 0
это с каких пор расширение mysql у нас устаревшее?

не вижу никакой проблемы использовать эту же конструкцию для mysqli.

С того самого момента, как вышла СУБД MySQL 4.1.

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

 

Интересное решение...

Для PHP5 надо будет тогда исправить на mysqli_unbuffered_query

Такой функции не существует.

Не нужно выдумывать решений. :D

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

  • 0
Такой функции не существует.

Не нужно выдумывать решений. :D

 

Действительно. такой функции нет.

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

  • 0

Не нужно искать проблему там, где её нет :D Если припрёт, можно сделать и просто mysqli_query("SET NAMES " . $this->obj['mysql_codepage']);, там именно такую и используют.

 

Проблема в наличии этих запросов. Но тут цель была, скорее всего, такая: не объяснять каждый раз устанавливающим, почему у них проблемы с кодировкой. Тем более, что на тот момент с этим у хостеров было так-себе.

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

  • 0

Все. Я разобрался. Для себя я эту функцию удалил, ибо мне она не нужна.

 

Тему можно закрыть.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

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

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

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

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.