подготовленный оператор pdo вставляет DEFAULT, когда переменная в BindParam имеет значение null - PullRequest
4 голосов
/ 27 февраля 2011

У меня есть эта проблема: Я использую подготовленное заявление PDO .... Я хочу привязать переменную НО, если переменная равна NULL, она должна ВСТАВИТЬ в MYSQL ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ поля ...

Я пытаюсь с IFNULL (: User_Login__Is_Active, DEFAULT), И я попробовал также: COALESCE (: User_Login__Is_Active, DEFAULT), Та же ошибка: PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка;

Как ты можешь это сделать?

Посмотрите этот пример:

        $stmt = $this->pdo->prepare('INSERT INTO user_login
                                        ( User_Login__ID,
                                          User_Login__Is_Active,
                                          User_Login__Created_Date )
                                   VALUES ( 
                                          :User_Login__ID,
                                          IFNULL(:User_Login__Is_Active, DEFAULT),
                                          :User_Login__Created_Date )');


    $stmt->bindParam(':User_Login__ID', $this->User_Login__ID, PDO::PARAM_INT);
    $stmt->bindParam(':User_Login__Is_Active', $this->User_Login__Is_Active, PDO::PARAM_STR, 100);
    $stmt->bindParam(':User_Login__Created_Date', $this->User_Login__Created_Date, PDO::PARAM_STR, 100);


    $this->User_Login__Is_Active = null;

1 Ответ

6 голосов
/ 27 февраля 2011

Ключевое слово DEFAULT нельзя использовать внутри выражения, оно может заменить только все выражение.

Однако функцию DEFAULT() можно использовать где угодно.

Поэтому замените DEFAULT в вашем примере на DEFAULT(User_Login__Is_Active).

...