Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск текста UTF-8 по БД 
:(
    Опции темы
UnHost
Дата 29.9.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



Я ищу по нику в таблице юзеров заведомо несуществующую запись. Вместо этого мне выдает совершенно не тот результат. Например:
Код

<?php 
//Соединение с базой данных 
include("config.php"); 

//Допустим пользователь посылает такой логин 
$_POST['login'] = "РђРђ"; //Текст в UTF-8 "АА" 

//Запрос 
$sql = mysql_query("SELECT * FROM `accounts` WHERE `login` = '".mysql_escape_string($_POST['login'])."' LIMIT 1;"); 

if(mysql_affected_rows() == 0) 
{ 
echo "К сожалению, пользователь ".htmlspecialchars($_POST['login'])." не найден в базе данных.<br />\n"; 
} 
else 
{ 
echo "Найдено.<br />\n"; 
$user_data = mysql_fetch_array($sql); 
$user_id = $user_data['id']; 
$nickname = $user_data['nickname'];  
echo "ID: ".$user_id."<br />\n"; 
echo "Вы искали: ".$nickname."<br />\n"; //При чем возвращает, гад, нормальный ник, а не ерундовый. 
//Я искал "АА", мне вернуло "ЮС". 
//Я заметил, что зависит от количества букв. 
//Могу ввести "ЙУХ", он мне вернет данные пользователя "ОЛЯ". 
} 
?>

Таблица:
Код

CREATE TABLE `chat_users` ( 
  `id` int(11) unsigned NOT NULL auto_increment, 
  `nickname` tinytext NOT NULL, 
  `password` tinytext NOT NULL, 
  `ip` tinytext NOT NULL, 
  `ua` text NOT NULL, 
  `level` tinyint(1) NOT NULL default '0', 
  `photo` tinytext NOT NULL, 
  `invisible` tinyint(1) NOT NULL default '0', 
  `status` tinytext NOT NULL, 
  `kick` int(11) unsigned NOT NULL default '0', 
  `moder` tinytext NOT NULL, 
  `reason` text NOT NULL, 
  `ban` tinyint(1) NOT NULL default '0', 
  `name` tinytext NOT NULL, 
  `sex` tinyint(1) NOT NULL default '0', 
  `email` text NOT NULL, 
  `site` text NOT NULL, 
  `birthday` tinytext NOT NULL, 
  `from` text NOT NULL, 
  `mobile` tinytext NOT NULL, 
  `about` text NOT NULL, 
  `posts` int(11) NOT NULL default '0', 
  `answers` int(11) NOT NULL default '0', 
  `gbalans` int(11) NOT NULL default '0', 
  `smiles` tinyint(1) NOT NULL default '1', 
  `translit` tinyint(1) NOT NULL default '0', 
  `msgs` tinyint(2) NOT NULL default '5', 
  `refresh` tinyint(3) unsigned NOT NULL default '20', 
  `fsize` tinyint(1) NOT NULL default '1', 
  `security` tinyint(1) NOT NULL default '1', 
  `place` mediumint(9) NOT NULL default '0', 
  `time` int(11) unsigned NOT NULL default '0', 
  `intim` int(11) unsigned NOT NULL default '0', 
  `key` tinytext NOT NULL, 
  `regdate` tinytext NOT NULL, 
  `hidden` tinyint(1) NOT NULL default '0', 
  `mood` tinyint(2) NOT NULL default '0', 
  `emotions` tinyint(1) NOT NULL default '1', 
  PRIMARY KEY  (`id`) 
) TYPE=MyISAM ;



PM MAIL   Вверх
ZlojEzh
Дата 30.9.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: нет
Всего: 15



mysql_affected_rows() не используется с запросами выборки
используй mysql_num_rows($sql)

а вот откуда берется информация в $user_data - загадка

попробуй после запроса вписать
Код

while ($row = mysql_fetch_assoc($sql)) {
  print_r($row);
  print '<hr>';
}

посмотри, что выведет

попробуй использовать mysql_real_escape_string

+ mysql_query("set names utf8")

вообщем надо экспериментировать
PM MAIL ICQ   Вверх
UnHost
Дата 30.9.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



Цитата

mysql_affected_rows() не используется с запросами выборки.

Неправда. Если "*", то все OK. Не в этом дело.

Цитата

а вот откуда берется информация в $user_data - загадка

$user_data = mysql_fetch_array($sql);  -  это не видно чтоли?  smile

mysql_query("set names utf8") - пробовал давно. MySQL выдает ошибку.


Это сообщение отредактировал(а) UnHost - 30.9.2006, 12:49
PM MAIL   Вверх
ZlojEzh
Дата 30.9.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: нет
Всего: 15



странно...
Код

Get the number of affected rows by the last INSERT, UPDATE or DELETE query associated with link_identifier.

проверил: работает и с селектом, и не только при "*"
буду знать, спасибо

Цитата(UnHost @  30.9.2006,  12:49 Найти цитируемый пост)
$user_data = mysql_fetch_array($sql);  -  это не видно чтоли?

я про то, что по твоим словам результат заведомо пустой

Цитата(UnHost @  30.9.2006,  12:49 Найти цитируемый пост)
mysql_query("set names utf8") - пробовал давно. MySQL выдает ошибку.

какую? 'Unknown character set' или что-то другое?

Цитата(UnHost @  29.9.2006,  22:57 Найти цитируемый пост)
//Я заметил, что зависит от количества букв. 

есть идея, как это объясняется
возможно значения полей приводятся в какой-то левой кодировке: мускул при этом неизвестные символы приводит к знакам вопроса
вот и получаются две одинаковые строки

посмотри, что выдаст мускул на запрос SHOW VARIABLES LIKE 'character_set%'
PM MAIL ICQ   Вверх
UnHost
Дата 30.9.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



Неа, другую...

Код

mysql_query("SET NAMES 'utf-8';");
echo mysql_error();

Выводит: Unknown system variable 'NAMES'

посмотри, что выдаст мускул на запрос SHOW VARIABLES LIKE 'character_set%'
Код

character_set    cp1251
character_sets    cp1251 koi8_ru dec8 dos german1 hp8 latin1 latin2 swe7 usa7 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5

PM MAIL   Вверх
ZlojEzh
Дата 30.9.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

Репутация: нет
Всего: 15



попробуй
Код

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;


PM MAIL ICQ   Вверх
UnHost
Дата 30.9.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



К сожалению, не помогает...
PM MAIL   Вверх
-=Ustas=-
Дата 1.10.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



UnHost, версия БД какая? И есть ли возможность правки my.cnf?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
UnHost
Дата 1.10.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



Код

UnHost, версия БД какая?


MySQL 4.0.24

Код

И есть ли возможность правки my.cnf?

Нет.
PM MAIL   Вверх
UnHost
Дата 24.10.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2006

Репутация: нет
Всего: нет



Хы...Короче, опять решил вернуться к этой проблеме...На этот раз решил на TINYBLOB сменить тип поля "nickname" - все OK теперь smile
Всем спасибо. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.