Ошибка неверное значение для целого числа

Собственно запрос

Select t_id,end_data, 
case when tbl_city.NAZV is null then tc_name else tc_name || ', ' || NAZV end || ', ' || address as NAZV, 
case status when 0 then 'Не подтверждена' when 1 then 'Подтверждена' when 2 then 'В работе' when 3 then 'На проверке' else 'Закрыта' end as st,
case when cell_ticket is null then 'Не назначено' else cell_ticket end as st,
case when cell_ticket is null then 'Не указано' else cell_ticket end as cell
from us_ticket.ticket
join us_ticket.tbl_countryside on ticket.city_id = tbl_countryside.tc_id
left join us_ticket.tbl_city on tbl_countryside.citycode = tbl_city.city_id;

Ошибка на строке

case when cell_ticket is null then 'Не указано' else cell_ticket end as cell

Как только ее убираю все начинает работать. Ругается на эту часть then "Не указано"

Текст ошибки

ОШИБКА: неверное значение для целого числа: «Не указано»
СТРОКА 1: …та’ end as st, case when cell_ticket is null then ‘Не указан…

Собственно запрос

Select t_id,end_data, 
case when tbl_city.NAZV is null then tc_name else tc_name || ', ' || NAZV end || ', ' || address as NAZV, 
case status when 0 then 'Не подтверждена' when 1 then 'Подтверждена' when 2 then 'В работе' when 3 then 'На проверке' else 'Закрыта' end as st,
case when cell_ticket is null then 'Не назначено' else cell_ticket end as st,
case when cell_ticket is null then 'Не указано' else cell_ticket end as cell
from us_ticket.ticket
join us_ticket.tbl_countryside on ticket.city_id = tbl_countryside.tc_id
left join us_ticket.tbl_city on tbl_countryside.citycode = tbl_city.city_id;

Ошибка на строке

case when cell_ticket is null then 'Не указано' else cell_ticket end as cell

Как только ее убираю все начинает работать. Ругается на эту часть then "Не указано"

Текст ошибки

ОШИБКА: неверное значение для целого числа: «Не указано»
СТРОКА 1: …та’ end as st, case when cell_ticket is null then ‘Не указан…

Я уже искал и пытался исправить ошибку, но я не мог этого сделать. В чем проблема внутри моего кода? Я вставлю код и ошибку ниже. Как я понимаю, это о типе данных. Если я сделаю какие-либо грамматические ошибки, извините за это.

$sql = <<<SQL
INSERT INTO karakter (KullanıcıAdı,uid,Isim,Cinsiyet,Irk,Boy,Kilo,Gün,Ay,Yıl,Güç,Bünye,Dayanıklılık,Çeviklik,Karizma,Zeka,İrade,Odaklanma,Ustalık,Ziraat,İşçilik,Aşçılık,Botanik,Balıkçılık,Dericilik,Marangozluk,Hekimlik,VahşiYaşam,DuvarUstalığı,Camcılık,Demircilik,Avcılık,Şarapçılık,Çekilme,Kalkan,Hançer,Kılıç,Balta,Gürz,Mızrak,Yay,Arbalet)
VALUES ("$user","$uid","$isim","$cinsiyet","$irk","$boy","$kilo","$gun","$ay","$yil","$Güç","$Bünye","$Dayanıklılık","$Çeviklik","$Karizma","$Zeka","$İrade","$Odaklanma","$Ustalık",'$Ziraat',"$İşçilik","$Aşçılık","$Botanik","$Balıkçılık","$Dericilik","$Marangozluk","$Hekimlik","$VahşiYaşam","$DuvarUstalığı","$Camcılık","$Demircilik","$Avcılık","$Şarapçılık","$Çekilme","$Kalkan","$Hançer","$Kılıç","$Balta","$Gürz","$Mızrak","$Yay","$Arbalet")
ON DUPLICATE KEY UPDATE
KullanıcıAdı=VALUES(KullanıcıAdı),
uid=VALUES(uid),
Isim=VALUES(Isim),
Cinsiyet=VALUES(Cinsiyet),
Irk=VALUES(Irk),
Boy=VALUES(Boy),
Kilo=VALUES(Kilo),
Gün=VALUES(Gün),
Ay=VALUES(Ay),
Yıl=VALUES(Yıl),
Güç=VALUES(Güç),
Bünye=VALUES(Bünye),
Dayanıklılık=VALUES(Dayanıklılık),
Çeviklik=VALUES(Çeviklik),
Karizma=VALUES(Karizma),
Zeka=VALUES(Zeka),
İrade=VALUES(İrade),
Odaklanma=VALUES(Odaklanma),
Ustalık=VALUES(Ustalık),
Ziraat=VALUES(Ziraat),
İşçilik=VALUES(İşçilik),
Aşçılık=VALUES(Aşçılık),
Botanik=VALUES(Botanik)
SQL;

Ошибка:

Неверное целочисленное значение: » для столбца ‘Ziraat’ в строке 1

3

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

1

26.10.2015, 14:03. Показов 25628. Ответов 23


Студворк — интернет-сервис помощи студентам

Добрый день! Скажите, пожалуйста. Можно в PostgreSQL как-нибудь автоматически заполнить таблицу данными из Excel?

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

26.10.2015, 14:25

2

напрямую в excel не уверен, что такое есть… но есть запись данных в CSV-файл. см. COPY

1

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 07:04

 [ТС]

3

У меня прав нет:
ОШИБКА: для использования COPY с файлами нужно быть суперпользователем
HINT: Не имея административных прав, можно использовать COPY с stdout и stdin (а также команду psql copy).

Я еще пробовала через интерфейс pgAdmin III сделать. Выбираю таблицу, в меню выбираю Импорт. Открывается окно: ‘Import data from file into tablename’ Нужно выбрать формат и кодировку. Формат выбираю csv, кодировку — по умолчанию UTF8. Жму Импорт. Выдает ошибку: Неверная последовательность байт для кодировки UTF8.

0

grgdvo

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 07:43

4

Да, забыл про права суперпользователя…

Для psql тоже достаточно легко делается

Bash
1
psql -c "copy mytable from mydata.csv (format csv)" mydb -U myuser

Цитата
Сообщение от Simply me
Посмотреть сообщение

Жму Импорт. Выдает ошибку: Неверная последовательность байт для кодировки UTF8.

А выбранный файл точно имеет кодировку UTF8??? Я вот у себя решил проверить, все импортиться прекрасно.

1

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 08:14

 [ТС]

5

Цитата
Сообщение от grgdvo
Посмотреть сообщение

А выбранный файл точно имеет кодировку UTF8???

Не точно. Я что-то не помню, как проверить кодировку. Файл экселевский.

0

grgdvo

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 08:21

6

Вы на windows или linux?
Если windows, то с большой долей вероятности excel создаст csv-файл в кодировке win1251.
В linux

Bash
1
enca filename.csv

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 08:25

 [ТС]

7

Windows. Выбрала кодировку win1251. Все равно ошибка.
Неверная последовательность байт для кодировки «WIN1251»

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 08:44

8

Может тогда cp866 )
В windows уже не работаю, раньше помню FarManager умел кодировки показывать.

Добавлено через 6 минут
Проверил у себя в виртуалке… У меня 2007 эксель стоит… сохраняет как CSV (MSDOS) — это кодировка cp866

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 09:44

 [ТС]

9

У меня нет такого варианта. Есть вариант WIN866
Вообщем перемерила все предлагаемые кодировки. Везде одна и та же ошибка: Неверная последовательность байт для кодировки…
А при проверке кодировки MULE_INTERNAL ошибка: Неверное значение для целого числа «…» И там какие-то косячные символы.

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 09:55

10

Полагаю стоит заново начать с экспорта в экселе, заново сделать CSV-файл, открыть его тем же notepad’ом и посмотреть, что там внутри. Я сейчас не могу проверить WIN866, но позже просто ради интереса попробую.

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 10:43

 [ТС]

11

Я не очень поняла) Это не экспортированный файл. Просто экселевский файл. Сама создавала. Сейчас сохранила как csv. Открыла notepad’ом. Там все нормально отображается, только вместо границ ячеек ‘;’ Зашла в Notepad на вкладку Кодировки. Там отмечена Кодировка в UTF-8 (без BOM).

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 12:59

12

Ну теперь импорт полученного csv-файла делайте в postgresql. что получится?

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 13:12

 [ТС]

13

grgdvo, спасибо! С кодировкой понятно Теперь с типами проблемы. У меня в этом файле 1 запись. Первый столбец — idшник, остальные — null. При импорте пишет ошибку: неверное значение для целого числа: «139;;;;;;;;;;;;» Почему-то он не понимает, что точка с запятой к следующим столбцам относится.

Добавлено через 2 минуты
Я просто раньше не работала с БД

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 13:33

14

Цитата
Сообщение от Simply me
Посмотреть сообщение

точка с запятой к следующим столбцам относится.

Нужно указать, что разделителем полей будет «точка с запятой», по умолчанию «запятая» используется (от CSV = Comma-Separated Values). Но Excel почему-то решил, что надо непременно «;» использовать.
Вот снимок экрана моего pgadmin. При импорте поменяйте разделитель. Еще возможно с NULL-значениями придется поработать, если у вас в файле есть такие пустоты со значениями. Также нужно по структуре таблицы пройтись. У вас количество полей соответствует количество колонок в excel?? возможно придется указать порядок колонок.

Импорт данных из Excel

1

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 13:48

 [ТС]

15

Спасибо,grgdvo, получилось импортировать!)) Последний вопрос. У меня десятичный разделитель был запятая, перед импортом я заменила ее на точку. Потом я буду импортировать файл, где 6000 записей, и тоже везде десятичный разделитель запятая. Лучше в Excel везде поменять на точку или можно где-нибудь при импорте указать, что десятичный разделитель запятая?

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

27.10.2015, 14:07

16

Будет проще и быстрее поменять в экселе запятую на точку, чем городить с локализацией и восприятием формата вещественного числа.

1

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 14:09

 [ТС]

17

Ясно, спасибо!

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

29.10.2015, 07:24

 [ТС]

18

grgdvo, а Вы пробовали импортировать столбцы, в которых есть кириллица? У таких столбцов все-таки проблема с кодировкой

0

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,862

29.10.2015, 13:27

19

У меня CSV-файл был в кодировке UTF-8 и база данных создана в UTF-8. Все импортировалось успешно!

0

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

29.10.2015, 13:29

 [ТС]

20

А где проверить кодировки CSV-файла и базы данных?

0

i have a table:

                id | detail
                 1 | ddsffdfdf ;df, deef,"dgfgf",/dfdf/

when I did: insert into details values(1,'ddsffdfdf ;df, deef'); => got inserted properly
When I copied that inserted value from database to a file,the file had: 1 ddsffdfdf ;df, deef
Then I loaded the whole csv file to pgsql database,with values in the format: 1 ddsffdfdf ;df, deef
ERROR: invalid input syntax for integer: «1 ddsffdfdf ;df, deef is obtained. How to solve the problem?

asked May 29, 2015 at 11:25

user3823859's user avatar

user3823859user3823859

4691 gold badge7 silver badges20 bronze badges

3

CSVs need a delimiter that Postgres will recognize to break the text into respective fields. Your delimiter is a space, which is insufficient. Your CSV file should look more like:

1,"ddsffdfdf df, deef"

And your SQL should look like:

COPY details FROM 'filename' WITH CSV;

The WITH CSV is important because it tells Postgres to use a comma as the delimiter and parses your values based on that. Because your second field contains a comma, you want to enclose its value in quotes so that its comma is not mistaken for a delimiter.

To look at a good example of a properly formatted CSV file, you can output your current table:

COPY details TO '/your/filename.csv' WITH CSV;

answered May 29, 2015 at 11:29

vol7ron's user avatar

vol7ronvol7ron

40.4k21 gold badges117 silver badges172 bronze badges

14

Активист

  • #1

C PostgreSQL не работа, но надо пару задач сделать. Подскажите, нужно безусловное приводение типов к int / decimal. Что бы не валилась ошибка, а то валится в FATAL, ибо обработчик такой:

PHP:

<?php
/**
* Класс для работы с базой данных PostgreSQL
*/
class app_db_pgsql
{
    /**
    * Аттрибут объекта содержит текущую ссылку на соединение с СУБД (connection id)
    * @var resource|null
    */
    private static $connection_id;

    /**
    * Аттрибут содержит ресурс выполненный функцией pg_execute
    * @var resource
    */
    private $_last_pg_query_resource;

    /**
    * Метод выполняет соединение с postgresql или если соединение установлено возвращает текущий линк
    * @return resource
    */
    private function connection_id()
    {
        if (!isset(self::$connection_id))
        {
            if (! (self::$connection_id = pg_connect("host=localhost dbname=db user=use password=pass")) )
            {
                trigger_error("Ошибка соединения с базой данных PostgreSQL: ".pg_last_error(), E_USER_ERROR);
            }
       
            pg_set_client_encoding(self::$connection_id, "koi8-r"); // устанавлиаем кодировку клиента в соотвествии с кодировкой сайта
        }
   
        return self::$connection_id;
    }

    /**
    * Метод подготовки SQL запроса
    * @param unknown $query
    * @return boolean
    */
    public function prepare($query)
    {
        if (! pg_prepare($this->connection_id(), "", $query) )
        {
            trigger_error("Подготовка SQL запроса {$query} завершилось неудачно: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Выполняем подготовленный SQL запрос
    * @param array $params
    * @return app_db_pgsql
    */
    public function execute(array $params = array())
    {
        if (! ($this->_last_pg_query_resource = pg_execute($this->connection_id(), "", $params)) )
        {
            trigger_error("Выполнение ранее подгтовленного запроса произошло с ошибкой: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Получаем строку
    * @return array
    */
    public function fetch_row()
    {
        return pg_fetch_row($this->_last_pg_query_resource);
    }

    /**
    * Получаем строку (ассоциативный массив)
    * @return array
    */
    public function fetch_assoc()
    {
        return pg_fetch_assoc($this->_last_pg_query_resource);
    }


    /**
    * Выполняет SQL без предподготовки, но с параметрами
    * @param string $query
    * @param array $params
    * @return app_db_pgsql
    */
    public function query_params($query, array $params = array())
    {
        if (! ($this->_last_pg_query_resource = pg_query_params($this->connection_id(), $query, $params)) )
        {
            trigger_error("Выполнение запроса c параметрами произошло с ошибкой: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Возвращает количество затронутых строк
    * @return number
    */
    public function num_rows()
    {
        return pg_num_rows($this->_last_pg_query_resource);
    }
}

Пробовал собственно так:

PHP:

public function getTwByCode($tw_code)
    {
        $pg = new app_db_pgsql();
        $pg->query_params("select * from type_of_work where tw_code = cast($1 as int8)", array($tw_code));
       
        if ($pg->num_rows() === 1)
        {
                return $pg->fetch_assoc();
        }
       return false;
    }

Валится с ошибкой , в случае плохого INT’а:

Код:

Warning: pg_query_params() [function.pg-query-params]: Query failed: ОШИБКА: неверное значение для целого числа: "a" in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 95

Fatal error: Выполнение запроса c параметрами произошло с ошибкой: ОШИБКА: неверное значение для целого числа: "a" in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 97

На PHP приводить к unsigned int не вариант (поскольку максимального значения для PHP-шного INT меньше чем bigint PostreSQL)

Последнее редактирование: 19 Май 2014

Активист

  • #3

Вот в чем проблема:

is_number не подойдет, ибо:

Код:

Warning: pg_query_params() [function.pg-query-params]: Query failed: ОШИБКА: значение "9223372036854775808" вне диапазона для типа bigint in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 95

Fatal error: Выполнение запроса c параметрами произошло с ошибкой: ОШИБКА: значение "9223372036854775808" вне диапазона для типа bigint in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 97
  • #4

preg_match() + сравнение строк.

  • #5

Подскажите, нужно безусловное приводение типов к int / decimal. Что бы не валилась ошибка…

А к какому числу это безусловное приведение должно приводить букву «a» или число за пределами диапазона int8?

  • #6

Вот кстати придумалось Элегантное Решение:

Код:

create function shit_to_integer(incoming_shit text, default_shit int8 default null)
returns int8
as $$
begin
  begin
    return incoming_shit::int8;
  exception
    when numeric_value_out_of_range or invalid_text_representation then
      return default_shit;
  end;
end;
$$ language plpgsql immutable called on null input security definer;

Соответственно shit_to_integer(‘a’) вернёт нам null, shit_to_integer(‘a’, 666) вернёт 666.

Активист

  • #7

А к какому числу это безусловное приведение должно приводить букву «a» или число за пределами диапазона int8?

Есть два варианта:
1. Передано не число;
2. Передано число за приделами.

MySQL приводит к пустоте (но не NULL), насколько я знаю. В MySQL проверка входных данных и генерация ошибок , подобных PG — это strict mode, который отключается.

1 — ое еще теститься на валидацию;
2 — ое уже нельзя проверить, в PHP.

За функцию спасибо)

Последнее редактирование: 20 Май 2014

I’m working on inserting a CSV into a table. I don’t have any control over what’s in the CSV and a lot of the fields are blank. In my very first record for instance, the field «baths_full» is just empty (two commas back to back).

On my production server running MySQL 5.5.37, it inserts the record with the baths_full as an empty field. On my local machine running MySQL 5.6.19, it gives me the error:

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'baths_full' at row 1 (SQL: insert into `listings_queue` (`

The weird thing is that the schema for the tables is identical. In fact, I used the export of the production machine to create the local database.

The field baths_full is set to TinyInt, unsigned, allow null, default null. One thing to add is that it looks like in the SQL insert statement Laravel is creating, it is treating null values as spaces. Regardless, my production machine runs the script without trouble but locally it won’t run.

Начнем сначала. Допустим, мне нужно написать хранимую процедуру (Postgresql, версия 11), которая добавляла бы данные в таблицу и проверяла корректные ли данные введены пользователем.

Т.е. что-то типо этого:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
END;
$$ LANGUAGE ‘plpgsql’;

Потом данная процедура вызывается, например так:
add_product_4(‘2’, ‘2019.11.12 12:23:24’, ‘Апрель’, ‘Цитрамон’, ’18’, ‘105’);

Пока все хорошо. НО, если в последнюю переменную вставить строковое значение, то клиент выдаст ошибку:
«ERROR: ОШИБКА: неверное значение для целого числа: «df»
LINE 2: …’, ‘2019.11.12 12:23:24’, ‘Апрель’, ‘Цитрамон’, ’18’, ‘df’);
^
SQL-состояние: 22P02
Символ: 78″

Моя же задача, чтобы данная ошибка приобрела читабельный вид.

Я попробовала сделать это так:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
EXCEPTION
WHEN invalid_text_representation THEN
RAISE NOTICE ‘Ошибка: неверный тип переменной’;
END;
$$ LANGUAGE ‘plpgsql’;

Т.е. зная код ошибки (22P02), я зашла на сайт: https://www.postgresql.org/docs/11/errcodes-append…
и узнала, как эта ошибка называется, после чего вставила это название после конструкции EXCEPTION WHEN. И применила конструкцию RAISE NOTICE для того. чтобы клиент теперь выводил заданный мною текст.

Но в итоге, после выполнения колла, ничего не меняется, клиент так и выводит дефолтный ответ (см. картинку).
5f6ca9b35bd04903012432.png

Я смотрела видеоурок, где человек делает всё тоже самое и у него получается. я не могу понять, что я делаю не так?
Само задание получила от работодателя, т.е. это тестовое задание, поэтому так важно сделать именно так, как просят.

Собственно запрос

Select t_id,end_data, 
case when tbl_city.NAZV is null then tc_name else tc_name || ', ' || NAZV end || ', ' || address as NAZV, 
case status when 0 then 'Не подтверждена' when 1 then 'Подтверждена' when 2 then 'В работе' when 3 then 'На проверке' else 'Закрыта' end as st,
case when cell_ticket is null then 'Не назначено' else cell_ticket end as st,
case when cell_ticket is null then 'Не указано' else cell_ticket end as cell
from us_ticket.ticket
join us_ticket.tbl_countryside on ticket.city_id = tbl_countryside.tc_id
left join us_ticket.tbl_city on tbl_countryside.citycode = tbl_city.city_id;

Ошибка на строке

case when cell_ticket is null then 'Не указано' else cell_ticket end as cell

Как только ее убираю все начинает работать. Ругается на эту часть then "Не указано"

Текст ошибки

ОШИБКА: неверное значение для целого числа: «Не указано»
СТРОКА 1: …та’ end as st, case when cell_ticket is null then ‘Не указан…

Я уже искал и пытался исправить ошибку, но я не мог этого сделать. В чем проблема внутри моего кода? Я вставлю код и ошибку ниже. Как я понимаю, это о типе данных. Если я сделаю какие-либо грамматические ошибки, извините за это.

$sql = <<<SQL
INSERT INTO karakter (KullanıcıAdı,uid,Isim,Cinsiyet,Irk,Boy,Kilo,Gün,Ay,Yıl,Güç,Bünye,Dayanıklılık,Çeviklik,Karizma,Zeka,İrade,Odaklanma,Ustalık,Ziraat,İşçilik,Aşçılık,Botanik,Balıkçılık,Dericilik,Marangozluk,Hekimlik,VahşiYaşam,DuvarUstalığı,Camcılık,Demircilik,Avcılık,Şarapçılık,Çekilme,Kalkan,Hançer,Kılıç,Balta,Gürz,Mızrak,Yay,Arbalet)
VALUES ("$user","$uid","$isim","$cinsiyet","$irk","$boy","$kilo","$gun","$ay","$yil","$Güç","$Bünye","$Dayanıklılık","$Çeviklik","$Karizma","$Zeka","$İrade","$Odaklanma","$Ustalık",'$Ziraat',"$İşçilik","$Aşçılık","$Botanik","$Balıkçılık","$Dericilik","$Marangozluk","$Hekimlik","$VahşiYaşam","$DuvarUstalığı","$Camcılık","$Demircilik","$Avcılık","$Şarapçılık","$Çekilme","$Kalkan","$Hançer","$Kılıç","$Balta","$Gürz","$Mızrak","$Yay","$Arbalet")
ON DUPLICATE KEY UPDATE
KullanıcıAdı=VALUES(KullanıcıAdı),
uid=VALUES(uid),
Isim=VALUES(Isim),
Cinsiyet=VALUES(Cinsiyet),
Irk=VALUES(Irk),
Boy=VALUES(Boy),
Kilo=VALUES(Kilo),
Gün=VALUES(Gün),
Ay=VALUES(Ay),
Yıl=VALUES(Yıl),
Güç=VALUES(Güç),
Bünye=VALUES(Bünye),
Dayanıklılık=VALUES(Dayanıklılık),
Çeviklik=VALUES(Çeviklik),
Karizma=VALUES(Karizma),
Zeka=VALUES(Zeka),
İrade=VALUES(İrade),
Odaklanma=VALUES(Odaklanma),
Ustalık=VALUES(Ustalık),
Ziraat=VALUES(Ziraat),
İşçilik=VALUES(İşçilik),
Aşçılık=VALUES(Aşçılık),
Botanik=VALUES(Botanik)
SQL;

Ошибка:

Неверное целочисленное значение: » для столбца ‘Ziraat’ в строке 1

3

I’m getting following error when I submit a form:

Can't added a new post. Incorrect integer value: '' for column 'aid' at row 1

Php Code:

$insert = mysql_query("INSERT INTO brt_articles VALUES( '', '$post_title', '$des', 
'$date', '$org_date')");    

    if($insert)
    {
        echo "<font color=green>Successfully added a new article.</font>";
        header("Refresh:3; url=allbrtarticle.php");
    }
    else
    {
        echo "<font color=red>Can't added a new post</font>" . 
              mysql_error();
    }

In my Localhost It’s ok. But in server why it’s giving me a error message ?

asked Feb 25, 2013 at 4:28

Babu Ahmed's user avatar

5

Probably that DB has differents settings than your local. STRICT_TRANS_TABLES mode might be turned on.
Try SELECT @@GLOBAL.sql_mode; and SELECT @@SESSION.sql_mode;.

answered Feb 25, 2013 at 4:48

sectus's user avatar

sectussectus

15.6k5 gold badges54 silver badges97 bronze badges

The aid field does not accept '' value as input.

The safest way is to specify column names as you are sending the query.

INSERT INTO brt_articles (title_field, description_field, date_field, org_date, fieldname) VALUES('$post_title', '$des', '$date', '$org_date');

If aid is a primary key, simply omit that field in your query

INSERT INTO brt_articles VALUES('$post_title', '$des', '$date', '$org_date')

answered Feb 25, 2013 at 4:36

Starx's user avatar

StarxStarx

77.2k47 gold badges183 silver badges260 bronze badges

2

aid is a column that is an integer, and you’re trying to insert '' into it. '' is not a number, so the insertion fails.

Perhaps there’s a server setting to auto-convert the incorrect type, but you shouldn’t rely on it (as you’ve just found out)

answered Feb 25, 2013 at 4:30

Patashu's user avatar

PatashuPatashu

21.4k3 gold badges45 silver badges53 bronze badges

This causes the error aid(INT) — which is included on you table columns(first column).

If its auto increment remove the ».

$insert = mysql_query("INSERT INTO brt_articles VALUES('$post_title', '$des', 
'$date', '$org_date')");  

Regards

answered Feb 25, 2013 at 4:32

BizApps's user avatar

BizAppsBizApps

6,0589 gold badges40 silver badges62 bronze badges

2

try

"INSERT INTO brt_articles VALUES('".$post_title."', '".$des."', '".$date."', '".$org_date."')"

Remove first '' it’s not needed as MySQL automatically add it if its primary key and auto_increment.

answered Feb 25, 2013 at 4:35

Dipesh Parmar's user avatar

Dipesh ParmarDipesh Parmar

27k8 gold badges60 silver badges90 bronze badges

your local db has the value of that column set to auto increment or has a default value.

on the server db, the table definition is not the same.

review and compare the table definitions and then make them consistent.

answered Feb 25, 2013 at 4:42

mson's user avatar

msonmson

7,7626 gold badges40 silver badges70 bronze badges

2

Начнем сначала. Допустим, мне нужно написать хранимую процедуру (Postgresql, версия 11), которая добавляла бы данные в таблицу и проверяла корректные ли данные введены пользователем.

Т.е. что-то типо этого:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
END;
$$ LANGUAGE ‘plpgsql’;

Потом данная процедура вызывается, например так:
add_product_4(‘2’, ‘2019.11.12 12:23:24’, ‘Апрель’, ‘Цитрамон’, ’18’, ‘105’);

Пока все хорошо. НО, если в последнюю переменную вставить строковое значение, то клиент выдаст ошибку:
«ERROR: ОШИБКА: неверное значение для целого числа: «df»
LINE 2: …’, ‘2019.11.12 12:23:24’, ‘Апрель’, ‘Цитрамон’, ’18’, ‘df’);
^
SQL-состояние: 22P02
Символ: 78″

Моя же задача, чтобы данная ошибка приобрела читабельный вид.

Я попробовала сделать это так:
CREATE PROCEDURE add_product_4 (a INT, b TIMESTAMP, c VARCHAR(20), d VARCHAR(50), e INT, f INT)
AS $$
BEGIN
INSERT INTO sales (ID, Sale_time, Pharmacy, product, Number_of_packages, Price)
VALUES (a, b, c, d, e, f);
EXCEPTION
WHEN invalid_text_representation THEN
RAISE NOTICE ‘Ошибка: неверный тип переменной’;
END;
$$ LANGUAGE ‘plpgsql’;

Т.е. зная код ошибки (22P02), я зашла на сайт: https://www.postgresql.org/docs/11/errcodes-append…
и узнала, как эта ошибка называется, после чего вставила это название после конструкции EXCEPTION WHEN. И применила конструкцию RAISE NOTICE для того. чтобы клиент теперь выводил заданный мною текст.

Но в итоге, после выполнения колла, ничего не меняется, клиент так и выводит дефолтный ответ (см. картинку).
5f6ca9b35bd04903012432.png

Я смотрела видеоурок, где человек делает всё тоже самое и у него получается. я не могу понять, что я делаю не так?
Само задание получила от работодателя, т.е. это тестовое задание, поэтому так важно сделать именно так, как просят.

Исправление ошибки #ЧИСЛО!

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel для iPad Excel Web App Excel для iPhone Excel для планшетов с Android Excel 2010 Excel 2007 Excel для Mac 2011 Excel для телефонов с Android Excel для Windows Phone 10 Excel Mobile Excel Starter 2010 Еще…Меньше

В Excel эта ошибка возникает тогда, когда формула или функция содержит недопустимое числовое значение.

Такое часто происходит, если ввести числовое значение, используя тип данных или числовой формат, который не поддерживается в разделе аргументов данной формулы. Например, нельзя ввести значение $1,000 в формате валюты, так как знаки доллара используются как индикаторы абсолютной ссылки, а запятые — как разделители аргументов. Чтобы предотвратить появление ошибки #ЧИСЛО!, вводите значения в виде неформатированных чисел, например 1000.

В Excel ошибка #ЧИСЛО! также может возникать, если:

  • в формуле используется функция, выполняющая итерацию, например ВСД или СТАВКА, которая не может найти результат.

    Чтобы исправить ошибку, измените число итераций формулы в Excel.

    1. На вкладке Файл выберите пункт Параметры. Если вы используете Excel 2007, нажмите кнопку Microsoft Office Изображение кнопки Office и выберите Параметры Excel.

    2. На вкладке Формулы в разделе Параметры вычислений установите флажок Включить итеративные вычисления.

      Снимок экрана: параметры итеративных вычислений

    3. В поле Предельное число итераций введите необходимое количество пересчетов в Excel. Чем больше предельное число итераций, тем больше времени потребуется для вычислений.

    4. Для задания максимально допустимой величины разности между результатами вычислений введите ее в поле Относительная погрешность. Чем меньше число, тем точнее результат и тем больше времени потребуется Excel для вычислений.

  • Результат формулы — число, слишком большое или слишком малое для отображения в Excel.

    Чтобы исправить ошибку, измените формулу таким образом, чтобы результат ее вычисления находился в диапазоне от -1*10307 до 1*10307.

    Совет: Если в Microsoft Excel включена проверка ошибок, нажмите кнопку Значок кнопки рядом с ячейкой, в которой показана ошибка. Выберите пункт Показать этапы вычисления, если он отобразится, а затем выберите подходящее решение.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

См. также

Полные сведения о формулах в Excel

Рекомендации, позволяющие избежать появления неработающих формул

Поиск ошибок в формулах

Функции Excel (по алфавиту)

Функции Excel (по категориям)

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Понравилась статья? Поделить с друзьями:
  • Ошибка неверное выражение паскаль
  • Ошибка неверное выражение pascal abc
  • Ошибка неверно установлены права доступа umi
  • Ошибка не хватает памяти гта 5
  • Ошибка неверно указана единица измерения word как убрать