SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.12.2011 13:50:56

Pusichka
Участник
Зарегистрирован: 27.10.2009
Сообщений: 6

utf8, русский язык

Всем доброго времени суток!
Отчаялся искать в интернете ответ, поэтому пишу здесь)
Итак,
Создана utf8 таблица в бд:
    require_once $_SERVER['DOCUMENT_ROOT']."/php/mysql_connect_private.php";
    @mysql_connect_private();

    $string = "CREATE TABLE `users` (`user_id` int(9) unsigned not null auto_increment,
    `email` VARCHAR(50),
    `password` VARCHAR(40),
    `name` VARCHAR(30),
    `surname` VARCHAR(40),
    `avatar` VARCHAR(50),
    PRIMARY KEY (`user_id`)) ENGINE=MyISAM CHARACTER SET=utf8";
    mysql_query($string) or die(mysql_error());
    mysql_query("ALTER TABLE `users` ADD INDEX (`user_id`)") or die(mysql_error());
    mysql_query("ALTER TABLE `users` ADD INDEX (`email`)") or die(mysql_error());

В таблицу делаем инъекцию при регистрации пользователя:
    $string = "INSERT INTO `users` (`user_id`, `email`, `password`, `name`, `surname`) VALUES ('0', ";
    $string .= "'".mysql_real_escape_string($_REQUEST['email'])."', ";
    $string .= "'".mysql_real_escape_string(md5($_REQUEST['password']))."', ";
    $string .= "'".mysql_real_escape_string($_REQUEST['name'])."', ";
    $string .= "'".mysql_real_escape_string($_REQUEST['surname'])."')";
    echo $string;
    mysql_query($string) or die(mysql_error());

Выдает:
INSERT INTO `users` (`user_id`, `email`, `password`, `name`, `surname`) VALUES ('0', 'test10@test.com', '098f6bcd4621d373cade4e832627b4f6', 'Mihail', 'Баженов')

- Проверял и русский и английский языки.

В итоге в БД фамилия на русском языке не заносится - пусто.
Если вручную через phpmyadmin заношу фамилию, то все нормально.
В итоге, что делать?) Понимаю, что ответ, скорее всего, прост, но уже убил час на поиск решения и тщетно.
Кстати, комментарии по правильному оформлению тоже приветствуются) Может что не так написано с точки черния защиты/правильно оформления. Спасибо!

П.С. Подключение к базе:

function mysql_connect_private()
{
    $addr = "localhost";
    $user = "____";
    $pass = "____";
    $db = "____";
    //  MySQl
    $abc = mysql_connect($addr, $user, $pass)
        or die("    MySQL: ".mysql_error());
    //
    @mysql_query('CREATE DATABASE $db');
    //
    mysql_select_db($db)
        or die("    $db: ".mysql_error());
    mysql_query("SET NAMES 'utf8'");
    mysql_query ("set character_set_client='utf8'");
    mysql_query ("set character_set_connection='utf8'");
    mysql_query ("set character_set_results='utf8'");
    mysql_query ("set character_set_database='utf8'");
    mysql_query ("set collation_connection='utf8_bin'");
}

П.П.С.
Отображается при вытаскивании из базы вручную внесенная фамилия на русском тоже иероглифами...

Отредактированно Pusichka (21.12.2011 14:09:14)

Неактивен

 

#2 21.12.2011 16:00:40

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: utf8, русский язык

Умного ничего в голову не приходит smile Разве что проверьте в логе БД как запрос зафиксировался, чтобы понять, проблема в самом запросе или всё же в танцах с кодировками.

Ну, а из глупого (мало ли):
1. SET NAMES 'utf8' - попробуйте вызвать без кавычек.
2. SET NAMES 'utf8' делает всё то же, что Вы потом выполняете в set character_set*. Оставьте только SET NAMES.
3. В создании таблицы комбинацию  "CHARACTER SET=utf8" вижу впервые, форма либо старая, либо новая)) Удостоверьтесь, что в структуре таблицы в поле фамилии кодировка utf8.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 21.12.2011 22:31:13

Pusichka
Участник
Зарегистрирован: 27.10.2009
Сообщений: 6

Re: utf8, русский язык

Не помогает. Если у кого-то будут предложения, буду очень благодарен!

Неактивен

 

#4 21.12.2011 23:18:11

Pusichka
Участник
Зарегистрирован: 27.10.2009
Сообщений: 6

Re: utf8, русский язык

Решил при подключении к базе данных поменять SET NAMES на 1251 и введенная в базу на русском языке через phpmyadmin фамилия отобразилась нормально. ТОлько почему? У меня же везде используется utf8

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson