Как обработать строку данных (кодировка utf-8) для запроса в MySQL?

Olsufr

Guest
Как обработать строку данных (кодировка utf-8) для запроса в MySQL?

Как правильно обработать строку данных (кодировка utf-8) для запроса в MySQL?

Ситуация такая:
в фоpум на PHP+MySQL надо импортировать данные из файлов (от другого форума). Есть импорте для этого. Но ...
данные в файлах находятся в кодировке utf-8 и php-скрипт импортера на каком-то этапе заваливается с ошибкой:
Код:
Invalid SQL: INSERT INTO userfield
      (userid,field1,field2,field3,field4,importuserid,isnew)
      VALUES
      ('971',
      '',
      'texttextext',
      'texttexttext.',
      '',
      '1',1
      )
mysql error: Duplicate entry '971' for key 1

mysql error number: 1062
Пробовал импортировать данные из файлов в кодировке CP-1251. Все работает хорошо.


Вот тот код, который вставляет содержимое переменной в строку запроса:
Код:
addslashes(htmlspecialchars($some_tekst))
Подозреваю, что функции addslashes и htmlspecialchars некорректно обрабатывают какие-то из символов utf-8


Пробовал тот файл, на котором спотыкается скрипт обрабатывать отдельно. Все прошло без ошибок.

PHP4.3.9
MySQL 3.23.58

Где здесь может быть ошибка?
 

neko

tеam neko
подозреваю, что у тебя вставляются дубликаты первичного ключа
перепроверь что и как ты импортируеш
или insert ignore
 

Olsufr

Guest
Автор оригинала: neko
подозреваю, что у тебя вставляются дубликаты первичного ключа
Возможно. Одно из полей с автоинкрементом.
Но судя по логике дупликатов быть не должно, т.к. записи добавляются последовательно, да и при кодировке CP-1251 все работает отлично.
 

Фанат

oncle terrible
Команда форума
1. зачем делать htmlspecialchars перед вставкой в базу?
2. да, некорректно. В документации все написано.
 

Olsufr

Guest
Автор оригинала: Фанат
1. зачем делать htmlspecialchars перед вставкой в базу?
Я показал лишь тот код, который был уже в скрипте.

Автор оригинала: Фанат
2. да, некорректно. В документации все написано.
А как лучше сделать, чтобы не было проблемы с utf-8 ?

-~{}~ 20.10.04 20:49:

Заменил в скрипте
Код:
addslashes(htmlspecialchars($some_tekst))
на
Код:
mysql_real_escape_string($some_tekst)
И все-равно та же ошибка.

-~{}~ 20.10.04 20:54:

Не понимаю, какие здесь могут быть дубликаты, если нет еще полной записи самой строки с ключом 971 (смотрел саму базу: запись записана на половину, т.е. часть полей не вписана).

Причем, если импортирую только один файл (с той самой записью, на которой спотыкается скрипт), то все идет хорошо (utf). Но если я конвертирую сразу много файлов, то ошибка выскакивает и именно на одном конкретном файле.
 
Сверху