Меню

Ошибка неверный синтаксис для типа boolean

I am trying to create the following function in Postgresql

CREATE OR REPLACE FUNCTION emat_proc_ad_user_login(user_id_in character varying, password_in character varying)
      RETURNS character varying AS
    $BODY$
    declare
        TESTING character varying(200):='';
    BEGIN
        raise notice 'before if case';

        IF (USER_ID_IN is NULL AND PASSWORD_IN IS NULL) THEN
            TESTING:='Username Or Password Cannot Be Blank';
            RAISE NOTICE '%',TESTING;

        ELSIF (SELECT USER_ID  FROM AD_USERMASTER WHERE USER_ID=USER_ID_IN) THEN
            IF (SELECT USER_ID  FROM AD_USERMASTER WHERE password=password_in) THEN
                TESTING:=USER_ID_IN;
                RAISE NOTICE '%',TESTING;
            ELSE
                TESTING:='PASSWORD INCORRECT';
            END IF;
        ELSE 
            IF (SELECT USER_ID FROM AD_USERMASTER WHERE password=password_in) THEN
                TESTING:='USER ID INCORRECT';
                RAISE NOTICE '%',TESTING;
            ELSE  
                raise notice 'first else part';
                TESTING:='USER ID AND PASSWORD INCORRECT';
                RAISE NOTICE '%',TESTING;
            END IF;
        END IF;

    return TESTING;

    END;
    $BODY$

while run this script in postgresql it shows an error

ERROR:  invalid input syntax for type boolean: "sadmin"

CONTEXT: PL/pgSQL function emat_proc_ad_user_login(character
varying,character varying) line 7 at IF

smn_onrocks's user avatar

smn_onrocks

1,2621 gold badge18 silver badges33 bronze badges

asked Jan 9, 2017 at 7:17

dinesh danny's user avatar

2

The problem is with the line containing ELSIF.

IF or ELSIF expect a boolean expression, but field user_id from table ad_usermaster seems to be a string data type. PostgreSQL tries to cast the query result to a boolean and fails because the value sadmin is not a valid boolean.

The correct solution depends on what you are trying to achieve, but maybe it is something along these lines:

ELSIF EXISTS
   (SELECT user_id FROM ad_usermaster WHERE user_id = user_id_in)
THEN

answered Jan 9, 2017 at 11:35

Laurenz Albe's user avatar

Laurenz AlbeLaurenz Albe

190k17 gold badges175 silver badges229 bronze badges

1

I’m trying to make a simple update query on postgresql. I don’t really understand the error as there is no boolean value or column type.
Here is the log :

cat=> UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2' and epekparentcategoryid='root' WHERE categoryId='281' and siteid='0' and categoryparentid='-1';
ERROR:  invalid input syntax for type boolean: "27af8b1e-c0c9-4084-8304-256b2ae0c8b2"
LINE 1: UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-830...

The table config :

cat=> d categories;
                Table "public.categories"
        Column        |         Type          | Modifiers 
----------------------+-----------------------+-----------
 categoryid           | character varying(32) | 
 categoryname         | text                  | 
 siteid               | integer               | 
 categoryparentid     | character varying(32) | 
 status               | integer               | default 0
 epekcategoryid       | text                  | 
 epekparentcategoryid | text                  | 
 categorylevel        | character varying(37) | 
 categoryidpath       | character varying(37) | 

asked Nov 21, 2012 at 14:50

themihai's user avatar

2

Try:

UPDATE categories 
SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2',
    epekparentcategoryid='root' 
WHERE categoryId='281' 
  and siteid='0' 
  and categoryparentid='-1';

You must separate fields in SET part with «,» , not with «AND«

answered Nov 21, 2012 at 15:21

Ihor Romanchenko's user avatar

Ihor RomanchenkoIhor Romanchenko

26.1k8 gold badges48 silver badges42 bronze badges

3

I’m trying to make a simple update query on postgresql. I don’t really understand the error as there is no boolean value or column type.
Here is the log :

cat=> UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2' and epekparentcategoryid='root' WHERE categoryId='281' and siteid='0' and categoryparentid='-1';
ERROR:  invalid input syntax for type boolean: "27af8b1e-c0c9-4084-8304-256b2ae0c8b2"
LINE 1: UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-830...

The table config :

cat=> d categories;
                Table "public.categories"
        Column        |         Type          | Modifiers 
----------------------+-----------------------+-----------
 categoryid           | character varying(32) | 
 categoryname         | text                  | 
 siteid               | integer               | 
 categoryparentid     | character varying(32) | 
 status               | integer               | default 0
 epekcategoryid       | text                  | 
 epekparentcategoryid | text                  | 
 categorylevel        | character varying(37) | 
 categoryidpath       | character varying(37) | 

asked Nov 21, 2012 at 14:50

themihai's user avatar

2

Try:

UPDATE categories 
SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2',
    epekparentcategoryid='root' 
WHERE categoryId='281' 
  and siteid='0' 
  and categoryparentid='-1';

You must separate fields in SET part with «,» , not with «AND«

answered Nov 21, 2012 at 15:21

Ihor Romanchenko's user avatar

Ihor RomanchenkoIhor Romanchenko

26.1k8 gold badges48 silver badges42 bronze badges

3

I am using PDO for a dynamical update query for PostgreSQL. The problem is, all the values are transmitted to the database as strings, which throws an error for the supposed boolean (edit: and integer) values:

PHP Fatal error: Uncaught PDOException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type boolean: »«

Edit: The problem appears whenever the boolean or integer fields get an empty input. What can I do to make the PDO transfer the inputs as «null» to the database instead of empty strings that throw the data type errors?

Below is my update method, I have tried to do the binding inside a loop and add an explicit type casting for the two supposed boolean values:

public function updateMod($array)
{
    $keys = array_keys($array);
    $vals = array_values($array);

    $setStr = "";
    foreach ($keys as $key) {
        $setStr .= "$key = :$key, ";
    }
    $setStr = rtrim($setStr, ", ");

    $pdoConn = DbConnection::openConnection();
    $stmt = $pdoConn->prepare("UPDATE mods SET $setStr WHERE id = :id;");

    $i = 0;
    foreach ($keys as $key) {
        // type casting the two supposed booleans:
        if($key === 'g_exists' || $key === 'w_exists') {
            $stmt->bindValue($key, $vals[$i], PDO::PARAM_BOOL);
        } else {
            $stmt->bindValue($key, $vals[$i]);
        }
        $i++;
    }

    $stmt->bindValue('id', $this->Id());

    if ($stmt->execute()) {
        return true;
    } else {
        return false;
    }
}

But I keep getting the same error.
Does anyone have an idea how to solve this?

I am using PDO for a dynamical update query for PostgreSQL. The problem is, all the values are transmitted to the database as strings, which throws an error for the supposed boolean (edit: and integer) values:

PHP Fatal error: Uncaught PDOException: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type boolean: »«

Edit: The problem appears whenever the boolean or integer fields get an empty input. What can I do to make the PDO transfer the inputs as «null» to the database instead of empty strings that throw the data type errors?

Below is my update method, I have tried to do the binding inside a loop and add an explicit type casting for the two supposed boolean values:

public function updateMod($array)
{
    $keys = array_keys($array);
    $vals = array_values($array);

    $setStr = "";
    foreach ($keys as $key) {
        $setStr .= "$key = :$key, ";
    }
    $setStr = rtrim($setStr, ", ");

    $pdoConn = DbConnection::openConnection();
    $stmt = $pdoConn->prepare("UPDATE mods SET $setStr WHERE id = :id;");

    $i = 0;
    foreach ($keys as $key) {
        // type casting the two supposed booleans:
        if($key === 'g_exists' || $key === 'w_exists') {
            $stmt->bindValue($key, $vals[$i], PDO::PARAM_BOOL);
        } else {
            $stmt->bindValue($key, $vals[$i]);
        }
        $i++;
    }

    $stmt->bindValue('id', $this->Id());

    if ($stmt->execute()) {
        return true;
    } else {
        return false;
    }
}

But I keep getting the same error.
Does anyone have an idea how to solve this?

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

Я пытаюсь выполнить простой пост по запросу от postgresql. Я действительно не понимаю многих ошибок, потому что кроме типа столбца по-прежнему нет логических значений.Вот документ:

Причина ошибки: недопустимый синтаксис ввода для логического дизайна
после логической переменной может быть присвоено мнение, отличное от истинного или ложного.

Недействительная функция

<лай>СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ update_test2(p_alter_name varchar, p_new_name varchar varchar)ВОЗВРАТ КАК $$ОБЪЯСНЯТЬ v_result varchar (25): = ‘ОК’; логическое v_boolean: = ‘t’; логический v2_boolean;НАЧИНАТЬесли v_boolean = ‘t’ тогда v2_boolean: = 1 + 1;Конец, если;возвращает v_result;КОНЕЦ;$$ LANGUAGE plpgsql;<для>выберите update_test2 (‘name_1’, ‘name_3’);

Правильная функция

<для>СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ update_test2(p_alter_name varchar, p_new_name varchar varchar)ВОЗВРАТ КАК $$ОБЪЯСНЯТЬ v_result varchar (25): = ‘ОК’; логическое v_boolean: означает «т»; цифровой v2_boolean;НАЧИНАТЬесли v_boolean = ‘t’, то v2_boolean: равно 1 + 1;Конец, если;возвращает v_result;КОНЕЦ;$$ LANGUAGE plpgsql;<для>выберите update_test2 (‘name_1’, ‘name_3’);

Ошибка: [PDOException] SQLSTATE [22P02]: недопустимое представление слова: 7 ОШИБКА: недопустимый формат сообщения для логического типа: ""

  • PHP 7.0.13
  • Phinx 0.6.5 Производство
  • CakePHP 3.3.15
  • Postgresql 9.5

Эта ошибка появляется только в том случае, если значение моментального снимка неверно
['in_offer' => false]

ошибка запроса ошибка недопустимый формат ввода для типа boolean

  $ table-> addColumn ('in_offer', 'boolean', [    'Стандартный' => ложь,    'null' => ложь,]); 
  ALTER TABLE public.products ADD COLUMN in_offer boolean;ALTER TABLE public.products ALTER COLUMN in_offer SET NOT NULL;ALTER TABLE public.products ALTER COLUMNin_offer SET DEFAULT false; 

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

Это может произойти по одной из следующих причин:

  • Javascript отключен или заблокирован навсегда расширением (например, подходящим блокировщиком рекламы)
  • Ваш браузер не поддерживает файлы cookie

Если вы считаете, что случайно попали в черный список, обратитесь по адресу [email protected], используя полный идентификатор реферала, указанный ниже.

Banny_Boom Вы не указали ввод параметра php.net/manual/en/pdo.constants, потому что запрос будет выглядеть следующим образом:
ОБНОВЛЕНИЕ public.users SET ‘false’ intimacy = WHERE login = “логин” и пустышка действительно идет без кавычек. Попробуйте другой тип:
$ statement = $ connection-> fix (“ОБНОВЛЕНИЕ public.SET пользователей sex =: sex WHERE go browsing =: login”); Инструкция
$ -> bindParam (‘логин’, логин RR, PDO :: PARAM_STR); Инструкция
$ -> bindValue (‘sex’, 0, PDO :: PARAM_BOOL); // Здесь bindValue, поскольку share – определенно ссылка на переменную, вы можете использовать bindParam. Значения – 0 => первое false =>: true

запрос пошел вниз ошибка недопустимый синтаксис ввода для логического дизайна

Banny_Boom вы не устанавливаете тип параметра php.net/manual/en/pdo.constants. И perl по умолчанию, afaik, использует PDO :: PARAM_STR, потому что каждый результат ваших убеждений будет «ложным», и запрос будет выглядеть следующим образом:
ОБНОВЛЕНИЕ public.users SET ‘false’ пол = WHERE login = “login” и ложь при удаче, без кавычек. Попробуйте:
$ instructions = RR connection-> prepare (“ОБНОВЛЕНИЕ public.SET пользователей sex =: очень нравится WHERE login =: login”); Инструкция
деньги -> bindParam (‘логин’, $ логин, PDO :: PARAM_STR); Инструкция
$ -> bindValue (‘sex’, 0, PDO :: PARAM_BOOL); // здесь bindValue, потому что из-за разделения значения, а не просто ссылки на хорошую сплошную переменную, вы можете вернуться к bindParam. Значения – 0 => ложь 3 => подлинная

г.

Я пытаюсь создать следующую функцию в Postgresql

CREATE OR REPLACE FUNCTION emat_proc_ad_user_login(user_id_in character varying, password_in character varying)
RETURNS character varying AS
$BODY$
declare
TESTING character varying(200):='';
BEGIN
raise notice 'before if case';

IF (USER_ID_IN is NULL AND PASSWORD_IN IS NULL) THEN
TESTING:='Username Or Password Cannot Be Blank';
RAISE NOTICE '%',TESTING;

ELSIF (SELECT USER_ID FROM AD_USERMASTER WHERE USER_ID=USER_ID_IN) THEN
IF (SELECT USER_ID FROM AD_USERMASTER WHERE password=password_in) THEN
TESTING:=USER_ID_IN;
RAISE NOTICE '%',TESTING;
ELSE
TESTING:='PASSWORD INCORRECT';
END IF;
ELSE
IF (SELECT USER_ID FROM AD_USERMASTER WHERE password=password_in) THEN
TESTING:='USER ID INCORRECT';
RAISE NOTICE '%',TESTING;
ELSE
raise notice 'first else part';
TESTING:='USER ID AND PASSWORD INCORRECT';
RAISE NOTICE '%',TESTING;
END IF;
END IF;

return TESTING;

END;
$BODY$

во время запуска этого скрипта в postgresql он показывает ошибку

ERROR:  invalid input syntax for type boolean: "sadmin"

КОНТЕКСТ: функция PL/pgSQL emat_proc_ad_user_login (различающийся символ, изменяющийся символ) строка 7 при IF

Я пытаюсь сделать простой запрос обновления на postgresql. Я действительно не понимаю ошибку, поскольку нет логического значения или типа столбца.
Вот лог :

cat=> UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2' and epekparentcategoryid='root' WHERE categoryId='281' and siteid='0' and categoryparentid='-1';
ERROR:  invalid input syntax for type boolean: "27af8b1e-c0c9-4084-8304-256b2ae0c8b2"
LINE 1: UPDATE categories SET epekcategoryid='27af8b1e-c0c9-4084-830...

конфигурация таблицы:

cat=> d categories;
                Table "public.categories"
        Column        |         Type          | Modifiers 
----------------------+-----------------------+-----------
 categoryid           | character varying(32) | 
 categoryname         | text                  | 
 siteid               | integer               | 
 categoryparentid     | character varying(32) | 
 status               | integer               | default 0
 epekcategoryid       | text                  | 
 epekparentcategoryid | text                  | 
 categorylevel        | character varying(37) | 
 categoryidpath       | character varying(37) | 

1 ответов


попробуй:

UPDATE categories 
SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2',
    epekparentcategoryid='root' 
WHERE categoryId='281' 
  and siteid='0' 
  and categoryparentid='-1';

вы должны разделить поля в SET часть с «,» , не с «AND«

25

автор: Igor Romanchenko


postgresql UPDATE error «ОШИБКА: недопустимый синтаксис ввода для логического типа:»

Я пытаюсь сделать простой запрос на обновление в postgresql. Я действительно не понимаю ошибку, так как нет логического значения или типа столбца. Вот журнал:

cat=> UPDATE Categories SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2' и epekparentcategoryid='root' WHERE categoryId='281' and siteid='0' и categoryparentid='-1'; ОШИБКА: неверный синтаксис ввода для логического типа: "27af8b1e-c0c9-4084-8304-256b2ae0c8b2" СТРОКА 1: ОБНОВЛЕНИЕ категорий SET epekcategoryid='27af8b1e-c0c9-4084-830...

Конфиг таблицы:

cat=> d категории; Таблица "public.categories" Столбец | Тип | Модификаторы ------------------------------------+----------+-- --------- идентификатор категории | переменный характер(32) | название категории | текст | идентификатор сайта | целое число | категорияродительский | переменный характер(32) | статус | целое число | по умолчанию 0 epekcategoryid | текст | epekparentcategoryid | текст | категорияуровень | переменный характер(37) | путь_идентификатора_категории | переменный характер(37) | 

1 ответы

Пытаться:

UPDATE categories 
SET epekcategoryid='27af8b1e-c0c9-4084-8304-256b2ae0c8b2',
    epekparentcategoryid='root' 
WHERE categoryId='281' 
  and siteid='0' 
  and categoryparentid='-1';

Вы должны разделить поля в SET расставаться с «,» , не со «AND«

Создан 21 ноя.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

postgresql

or задайте свой вопрос.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка неверный синтаксис для типа bigint
  • Ошибка неверное имя стиля word