Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
PHP & MySQL проблем енкодинга |

21.04.2010, 15:48
|
|
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме: 272527
Репутация:
19
|
|
PHP & MySQL проблем енкодинга
Юзаю Mihalism Multi Forum Host + phpBB 3.0.7-PL1, пытаюсь передать базе (MySQL, COLLATE=utf8_bin) данныe на кириллице, но как не крути (енкодинг базы и файлов) - всегда вылазят йероглифы
Подозирою что виноваты скрипты работы с базой...
Но знаний по MySQL не хватает.
database.php:
PHP код:
<?php
class mfhclass_mysql_driver
{
function connect($host = "localhost", $username, $password, $database, $new_link = NULL)
{
global $mfhclass;
$connection_id = mysql_connect($host, $username, $password, true);
if (is_resource($connection_id) == false) {
$this->error();
} else {
if (mysql_select_db($database, $connection_id) == false) {
$this->error();
} else {
if (is_resource($this->root_connection) == false) {
$this->root_connection = $connection_id;
} else {
if ($mfhclass->funcs->is_null($new_link) == false) {
if (is_array($this->alt_connections) == true) {
$this->alt_connections = array();
}
$this->alt_connections[$new_link] = $connection_id;
}
}
}
}
return $connection_id;
}
function close()
{
if (is_resource($this->root_connection) == true) {
mysql_close($this->root_connection);
}
if (is_array($this->alt_connections) == true) {
foreach ($this->alt_connections as $id => $connection) {
mysql_close($this->alt_connections[$id]);
}
}
}
function set_database_connection($database_id = 1) {
global $mfhclass;
if ($database_id != 1 && $mfhclass->funcs->is_null($database_id) == false) {
$database_info = $this->fetch_array($this->query("SELECT * FROM `mfh_forum_databases` WHERE `database_id` = '{$database_id}';"));
$this->connect($database_info['sql_host'], $database_info['sql_username'], $database_info['sql_password'], $database_info['sql_database'], $database_info['database_id']);
}
}
function query($query, $connection_id = NULL)
{
global $mfhclass;
if (is_resource($this->root_connection) == false) {
$this->connect($mfhclass->info->config['sql_host'], $mfhclass->info->config['sql_username'], $mfhclass->info->config['sql_password'], $mfhclass->info->config['sql_database']);
}
$query = str_replace("<# QUERY_LIMIT #>", ((($mfhclass->info->current_page * $mfhclass->info->config['max_results']) - $mfhclass->info->config['max_results']).", {$mfhclass->info->config['max_results']}"), $query);
if ($mfhclass->info->config['sql_tbl_prefix'] != "mmh_" && $mfhclass->funcs->is_null($mfhclass->info->config['sql_tbl_prefix']) == false){
$query = preg_replace("/mmh_(\S+?)([\s\.,]|$)/", ($mfhclass->info->config['sql_tbl_prefix']."\\1\\2"), $query);
}
if ($mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) {
$this->set_database_connection($connection_id);
if (is_resource($this->alt_connections[$connection_id]) == false) {
$this->error($query, "Unknown alternate connection id: {$connection_id}");
}
}
$this->query_result = mysql_query($query, (($mfhclass->funcs->is_null($connection_id) == false && $connection_id != 1) ? $this->alt_connections[$connection_id] : $this->root_connection));
if ($this->query_result == false) {
$this->error($query);
} else {
return $this->query_result;
}
}
function total_rows($query_id)
{
return mysql_num_rows($query_id);
}
function fetch_array($query_id, $result_type = MYSQL_ASSOC)
{
return mysql_fetch_array($query_id, $result_type);
}
function error_number()
{
global $mfhclass;
return (($mfhclass->funcs->is_null(mysql_error()) == false) ? mysql_errno() : "Unknown Error Number");
}
function error($query = "No Query Executed", $custom_error = NULL)
{
global $mfhclass;
$error_message = (($mfhclass->funcs->is_null($custom_error) == false) ? $custom_error : mysql_error());
$error_html = "\t\t\t<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />
<title>MySQL Error</title>
<style type=\"text/css\">
* { font-size: 100%; margin: 0; padding: 0; }
body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 75%; margin: 10px; background: #FFFFFF; color: #000000; }
a:link, a:visited { text-decoration: none; color: #005fa9; background-color: transparent; }
a:active, a:hover { text-decoration: underline; }
textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; border: 1px dashed #000000; background: #FFFFFF; padding: 5px; background: #f4f4f4; }
</style>
</head>
<body>
<p>
<b>MySQL Driver Error</b>
<br /><br />
A MySQL error has occurred.
Please copy the output shown below and email it immediately to <a href=\"mailto:{$mfhclass->input->server_vars['server_admin']}\">{$mfhclass->input->server_vars['server_admin']}</a>.
<br /><br />
<textarea readonly=\"readonly\" rows=\"15\" cols=\"40\" style=\"width:500px;\">Time Encountered: ".date("F j, Y, g:i:s a")."\nIP Address: {$mfhclass->input->server_vars['remote_addr']}\rError: {$error_message}\nError Number: ".$this->error_number()."\nQuery Executed: {$query}</textarea>
</p>
</body>
</html>";
exit($error_html);
return;
}
}
?>
и часть от install_queries.php (импортируемые данные в ДБ):
PHP код:
<?php
...
$mfhclass->db->install_queries[] = "DROP TABLE IF EXISTS `{$mfhclass->input->post_vars['access_name']}_acl_groups`;";
...
$mfhclass->db->install_queries[] = "CREATE TABLE `{$mfhclass->input->post_vars['access_name']}_acl_groups` (
`group_id` mediumint(8) unsigned NOT NULL default '0',
`forum_id` mediumint(8) unsigned NOT NULL default '0',
`auth_option_id` mediumint(8) unsigned NOT NULL default '0',
`auth_role_id` mediumint(8) unsigned NOT NULL default '0',
`auth_setting` tinyint(2) NOT NULL default '0',
KEY `group_id` (`group_id`),
KEY `auth_opt_id` (`auth_option_id`),
KEY `auth_role_id` (`auth_role_id`)
) CHARACTER SET `utf8` COLLATE `utf8_bin`
ENGINE=MyISAM ;";
$mfhclass->db->install_queries[] = "INSERT INTO `{$mfhclass->input->post_vars['access_name']}_acl_groups` (`group_id`, `forum_id`, `auth_option_id`, `auth_role_id`, `auth_setting`) VALUES (1, 0, 85, 0, 1);";
...
?>
Если в VALUES есть кириллица - она записывается йероглифами...
Спасибо что прочли до конца =) Сейчас - ПОМОГИТЕ !
|
|
|

21.04.2010, 15:50
|
|
Участник форума
Регистрация: 07.09.2008
Сообщений: 139
Провел на форуме: 351188
Репутация:
65
|
|
честно говоря читать весь код не стал, просто была проблема с кодировкой в связке phpbb3 и самописного скрипта, решил с помощью iconv результат запроса из базы.
|
|
|

21.04.2010, 15:51
|
|
Участник форума
Регистрация: 14.01.2009
Сообщений: 194
Провел на форуме: 798217
Репутация:
44
|
|
1 попробуй в самом документе
PHP код:
<?php
header("Content-Type: text/html; charset=utf-8");
?>
+
перед перед записью в бд (я делаю при конекте)
выполни запрос
$query= "SET NAMES utf8";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
Обязательно отпишись
Последний раз редактировалось ZnikiR; 21.04.2010 в 15:54..
|
|
|

21.04.2010, 16:31
|
|
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме: 272527
Репутация:
19
|
|
Сообщение от Byte_
честно говоря читать весь код не стал, просто была проблема с кодировкой в связке phpbb3 и самописного скрипта, решил с помощью iconv результат запроса из базы.
Насколько знаю - лишняя нагрузка на сервер...
Но опять вариант, хоть корявый
|
|
|

21.04.2010, 17:33
|
|
Познающий
Регистрация: 01.03.2009
Сообщений: 85
Провел на форуме: 272527
Репутация:
19
|
|
Помоему решил проблем (еще тестирую)
database.php
PHP код:
...
function connect($host = "localhost", $username, $password, $database, $new_link = NULL)
{
global $mfhclass;
$connection_id = mysql_connect($host, $username, $password, true);
if (is_resource($connection_id) == false) {
$this->error();
} else {
if (mysql_select_db($database, $connection_id) == false) {
$this->error();
} else {
@mysql_query("SET NAMES 'utf8'", $connection_id);
if (is_resource($this->root_connection) == false) {
$this->root_connection = $connection_id;
} else {
if ($mfhclass->funcs->is_null($new_link) == false) {
if (is_array($this->alt_connections) == true) {
$this->alt_connections = array();
}
$this->alt_connections[$new_link] = $connection_id;
}
}
}
}
return $connection_id;
}
function close()
...
Спасибо ZnikiR
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|