Задавайте вопросы, мы ответим
Вы не зашли.
Всем доброго времени суток!
Отчаялся искать в интернете ответ, поэтому пишу здесь)
Итак,
Создана 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)
Неактивен
Умного ничего в голову не приходит Разве что проверьте в логе БД как запрос зафиксировался, чтобы понять, проблема в самом запросе или всё же в танцах с кодировками.
Ну, а из глупого (мало ли):
1. SET NAMES 'utf8' - попробуйте вызвать без кавычек.
2. SET NAMES 'utf8' делает всё то же, что Вы потом выполняете в set character_set*. Оставьте только SET NAMES.
3. В создании таблицы комбинацию "CHARACTER SET=utf8" вижу впервые, форма либо старая, либо новая)) Удостоверьтесь, что в структуре таблицы в поле фамилии кодировка utf8.
Неактивен
Не помогает. Если у кого-то будут предложения, буду очень благодарен!
Неактивен
Решил при подключении к базе данных поменять SET NAMES на 1251 и введенная в базу на русском языке через phpmyadmin фамилия отобразилась нормально. ТОлько почему? У меня же везде используется utf8
Неактивен