| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Вставка в поле smallint строки |
| Автор: supercelt 22.12.2009, 00:29 | ||||
| Привет! Такая проблема: Есть текстовый файл, в кодировке UTF-8
Читаю файл. Первая строка - это то что надо потом вставить в базу. ($cat) Тип поля базы - smallint(6). Кодировка базы - utf-8, сравнение - utf-8 general-ci. Эта цифра не вставляется, даже если очистить эту строку от пробелов, спецсимволов, а также если вручную привести эту строку к числовому типу.
Не помогает. Кстати, если сделать settype($cat, 'integer');, то получается тип - boolean |
| Автор: Ипатьев 22.12.2009, 08:48 |
| у чисел нет кодировки. что значит "не вставляется"? |
| Автор: lelik133 22.12.2009, 09:20 |
| не вставляется, mysql_error() в студию, по коду приведенному выше гадать не будем |
| Автор: supercelt 22.12.2009, 21:23 | ||||
Ипатьев У чисел-то нет, но это строка, которая читается из файла.
Потом в цикле применяю счётчик, таким образом первая строка из файла всегда выделяется и записывается в отдельную переменную, к примеру в $id. Так вот если сделать - gettype, то выдаст - string А если проверить $id ф-ией is_numeric, то выдаст - False Не всчтавляется, это значит что в поле после вставки стоит 0, потому что 0 - это дефолтное значение поля. Вот странно. Перед запросом в базу вывоожу это в браузер - показывает число(или всё-таки строку), но в БД не вставляет. Запрос проверенный, потому что если вь коде, вместо перменной поставить просто любое число, то оно вставляется. А если подставить переменную - то нет. Добавлено через 52 секунды lelik133 Mysql_error() ничего не выводит, запрос правильный. |
| Автор: Ипатьев 22.12.2009, 23:11 |
| Еще раз. У чисел не бывает кодировки. У файлов - тоже. Дело не в кодировке, а в РНР коде, который готовит или выполняет запрос. Код надо отлаживать. Причем чем раньше будет понято, что кодировки здесь не при чем, тем быстрее будет найдена очередная глупая опечатка |
| Автор: lelik133 22.12.2009, 23:23 | ||
ну тогда в чем вопрос, все же правильно а сделать echo запроса посмотреть глазами, чем он отличается от того что вводиться в ручную и найти ошибку нельзя? |
| Автор: supercelt 22.12.2009, 23:43 | ||
Может я чего-то не вижу...
`link_category`="2", - Показало эхо хапроса. А теперь я лезу в базу и вижу в этом поле - НУЛИИИ (( |
| Автор: nerezus 23.12.2009, 06:00 |
| `link_category`= 2 Ни кавычки, ни непечатываемые символы с загадочными кодами не нужны. |
| Автор: supercelt 23.12.2009, 15:57 |
| nerezus, если я убираю кавычки, то пишется ошибка - Unknown column '2' in 'field list' |
| Автор: bars80080 23.12.2009, 16:05 |
| как легко было бы исправить ошибку, если бы вы запостили сюда ещё и сам запрос, плюс формат таблицы (show create table) |
| Автор: supercelt 23.12.2009, 21:45 | ||||
bars80080 Запрос:
Структура
|
| Автор: bars80080 23.12.2009, 21:55 |
| это не запрос, это пхп-венигрет. запрос не содержит пхп-вставок, получить его - проще простого: echo $insert_to_jvse_links; п.с. вы уверены, что конструкция вида INSERT INTO table SET field=value, ... работает? у меня лично она помнится вызывала немедленную ошибку |
| Автор: nerezus 23.12.2009, 21:56 |
| supercelt, Query OK, 1 rows affected (63 ms) |
| Автор: supercelt 23.12.2009, 22:28 |
| bars80080 Вот echo запроса, я его постил выше insert into `jos_jvse_links` set `link_type`="1", `partner_url`="www.InfinitiUSA.com", `link_category`="2", `link_status`="0", `link_added_on`="1261514373", `link_published_on`="1261514373", `rlc_last_checked_on`="0", `date_of_last_reminder`="0", `snap_status`="1", `enable_scheduler`="1", `featured`="0", `out_hits`="0", `gpr_lcache_time`="0", `uid`="0", `add_relnofollow`="1", `gpr`="0", `gpr_update`="0", `atr`="0", `atr_update`="0", `sticky`="0" А конструкция INSERT INTO table SET field=value работает и ещё как. У меня всегда работала. Я кстати попробовал сделать и по классическому варианту (...) values (...) - результат один и тот же Добавлено через 46 секунд nerezus, А что это значит? |
| Автор: bars80080 23.12.2009, 23:07 |
| что-то у меня такое ощущение, что у нас разные мусклы. такой бы запрос у меня не прошёл по трём параметрам. завтра специально проверю на своей машине |
| Автор: unicross 24.12.2009, 01:23 | ||
supercelt, у вас перед цифрой 2 расположено 3 служебных байта, сокращенно называемых BOM. Удалите эти байты и все будет нормально :
Или сохраните файл word.txt в кодировке UTF-8 без BOM. |
| Автор: supercelt 24.12.2009, 02:49 |
| unicross, Спасибо большое тебе дружище! И правда заработало) |