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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка в поле smallint строки 
V
    Опции темы
supercelt
Дата 22.12.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет!
Такая проблема:
Есть текстовый файл, в кодировке UTF-8

Код

3
banky
komerční banka
komercni banka
kod banky


Читаю файл. Первая строка - это то что надо потом вставить в базу. ($cat)
Тип поля базы - smallint(6). Кодировка базы - utf-8, сравнение - utf-8 general-ci. Эта цифра не вставляется, даже если очистить эту строку от пробелов, спецсимволов, а также если вручную привести эту строку к числовому типу. 
Код

$cat = rtrim(trim($cat));

$cat = (int)$cat;
или
settype($cat, 'integer');
или
settype($cat, 'int');
 
Не помогает.

Кстати, если сделать settype($cat, 'integer');, то получается тип - boolean
PM   Вверх
Ипатьев
Дата 22.12.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



у чисел нет кодировки.
что значит "не вставляется"?
PM MAIL   Вверх
lelik133
Дата 22.12.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

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



не вставляется, mysql_error() в студию, по коду приведенному выше гадать не будем
PM ICQ   Вверх
supercelt
Дата 22.12.2009, 21:23 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ипатьев У чисел-то нет, но это строка, которая читается из файла. 
Код

4
слово1
слово2
слово3
слово4

Код

$file = file('word.txt');

Потом в цикле применяю счётчик, таким образом первая строка из файла всегда выделяется и записывается в отдельную переменную, к примеру в $id.
Так вот если сделать - 
gettype, то выдаст - string
А если проверить $id ф-ией is_numeric, то выдаст - False

Не всчтавляется, это значит что в поле после вставки стоит 0, потому что 0 - это дефолтное значение поля. Вот странно. Перед запросом в базу вывоожу это в браузер - показывает число(или всё-таки строку), но в БД не вставляет. Запрос проверенный, потому что если вь коде, вместо перменной поставить просто любое число, то оно вставляется. А если подставить переменную - то нет.

Добавлено через 52 секунды
lelik133  Mysql_error() ничего не выводит, запрос правильный. 
PM   Вверх
Ипатьев
Дата 22.12.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

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



Еще раз.
У чисел не бывает кодировки.
У файлов - тоже.
Дело не в кодировке, а в РНР коде, который готовит или выполняет запрос.
Код надо отлаживать.
Причем чем раньше будет понято, что кодировки здесь не при чем, тем быстрее будет найдена очередная глупая опечатка

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


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

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



Цитата

запрос правильный.  

ну тогда в чем вопрос, все же правильно
а сделать echo запроса посмотреть глазами, чем он отличается от того что вводиться в ручную и найти ошибку нельзя?

PM ICQ   Вверх
supercelt
Дата 22.12.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может я чего-то не вижу...
Код

$cat = rtrim(trim($cat));
echo $cat; // Выводит на экран число 2, то что и надо
                                //Это запрос к БД
                                                $insert_to_jvse_links = 'insert into `'.$dbprefix.'jvse_links` set `link_type`="1", `partner_url`="'.$lh.'", 
                        `link_category`="'.$cat.'", `link_status`="0", `link_added_on`="'.$time_now.'", 
                        `link_published_on`="'.$time_now.'", `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"';
echo $insert_to_jvse_links;    
//Выводит:
//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"            
                        if(mysql_query($insert_to_jvse_links))
                        echo 'yes<br />';// Выводит yes
                        else
                        echo mysql_error().'5no<br />'; //Выводит ошибку, если есть.


`link_category`="2", - Показало эхо хапроса. А теперь я лезу в базу и вижу в этом поле - НУЛИИИ ((
PM   Вверх
nerezus
Дата 23.12.2009, 06:00 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



`link_category`= 2

Ни кавычки, ни непечатываемые символы с загадочными кодами не нужны.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
supercelt
Дата 23.12.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nerezus, если я убираю кавычки, то пишется ошибка - Unknown column '2' in 'field list'
PM   Вверх
bars80080
Дата 23.12.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



как легко было бы исправить ошибку, если бы вы запостили сюда ещё и сам запрос, плюс формат таблицы (show create table)
PM MAIL WWW   Вверх
supercelt
Дата 23.12.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bars80080 Запрос:

Код

$insert_to_jvse_links = 'insert into `'.$dbprefix.'jvse_links` set `link_type` = "1", `partner_url`="'.$output_6.'", 
            `partner_email`="'.$output_8.'", `link_category`='.$category.', `link_status`="0", `link_added_on`="'.$time_now.'", 
            `link_published_on`="'.$time_now.'", `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";';
            if(mysql_query($insert_to_jvse_links))
            echo '1yes<br />';
            else
            echo mysql_error().'1no<br />';


Структура

Код

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Дек 23 2009 г., 21:47
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
-- 
-- БД: `joomla`
-- 

-- --------------------------------------------------------

-- 
-- Структура таблицы `jos_jvse_links`
-- 

CREATE TABLE `jos_jvse_links` (
  `id` int(11) NOT NULL auto_increment,
  `link_type` smallint(6) NOT NULL default '2',
  `partner_url` varchar(250) NOT NULL default '',
  `partner_email` varchar(100) NOT NULL default '',
  `reciprocal_link_url` varchar(250) NOT NULL default '',
  `link_category` smallint(6) default '0',
  `link_status` smallint(6) NOT NULL default '2',
  `link_added_on` int(11) NOT NULL default '0',
  `link_published_on` int(11) NOT NULL default '0',
  `link_rating` float NOT NULL default '0',
  `num_votes` int(11) NOT NULL default '0',
  `rlc_last_checked_on` int(11) NOT NULL default '0',
  `reject_reason` longtext NOT NULL,
  `emstr` varchar(32) NOT NULL default '',
  `date_of_last_reminder` int(11) NOT NULL default '0',
  `snap_status` smallint(6) NOT NULL default '0',
  `enable_scheduler` int(11) NOT NULL default '0',
  `featured` smallint(6) NOT NULL default '0',
  `out_hits` int(11) NOT NULL default '0',
  `gpr_lcache_result` varchar(30) NOT NULL default '',
  `gpr_lcache_time` int(11) NOT NULL default '0',
  `uid` int(11) NOT NULL default '0',
  `sef_string` varchar(60) NOT NULL default '',
  `itr_numvisits` int(11) NOT NULL default '0',
  `itr_lastvisittime` int(11) NOT NULL default '0',
  `itr_pagevisited` varchar(250) NOT NULL default '',
  `itr_frompage` varchar(250) NOT NULL default '',
  `ere_result` int(11) NOT NULL default '1',
  `flink_txn_id` varchar(80) NOT NULL default '',
  `metakeys` varchar(250) NOT NULL default '',
  `secondary_catids` varchar(250) NOT NULL default '',
  `add_relnofollow` smallint(6) NOT NULL default '0',
  `gpr` int(6) NOT NULL default '0',
  `gpr_update` int(11) NOT NULL default '0',
  `atr` int(11) NOT NULL default '0',
  `atr_update` int(11) NOT NULL default '0',
  `sticky` int(6) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
        


PM   Вверх
bars80080
Дата 23.12.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



это не запрос, это пхп-венигрет. запрос не содержит пхп-вставок, получить его - проще простого: 

echo $insert_to_jvse_links;



п.с. вы уверены, что конструкция вида INSERT INTO table SET field=value, ... работает?

у меня лично она помнится вызывала немедленную ошибку
PM MAIL WWW   Вверх
nerezus
Дата 23.12.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



supercelt, Query OK, 1 rows affected (63 ms)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
supercelt
Дата 23.12.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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, А что это значит?  smile 
PM   Вверх
bars80080
Дата 23.12.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



что-то у меня такое ощущение, что у нас разные мусклы. такой бы запрос у меня не прошёл по трём параметрам. завтра специально проверю на своей машине
PM MAIL WWW   Вверх
unicross
Дата 24.12.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(supercelt @  22.12.2009,  00:29 Найти цитируемый пост)
Есть текстовый файл, в кодировке UTF-8

supercelt, у вас перед цифрой 2 расположено 3 служебных байта, сокращенно называемых BOM. Удалите эти байты и все будет нормально :
Код

$cat = str_replace("\xEF\xBB\xBF", '', $cat);

Или сохраните файл word.txt в кодировке UTF-8 без BOM.
PM MAIL WWW   Вверх
supercelt
Дата 24.12.2009, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



unicross, Спасибо большое тебе дружище! И правда заработало)
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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