Mysqli не может вставить логическое значение в подготовленном выражении - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вставить новую строку в мою БД через php7.

Mysqli выдает ошибку

Column 'newsletter' cannot be null

Столбец новостной рассылки в базе данных - tinyint (1)

The database structure

Вот код:

public function Add_User(array $data) {

    if( !isset($data['name']) || !isset($data['email']) || !isset($data['newsletter']) )

            $optin = ( $data['newsletter'] === 'on' ) ? 1 : 0;
            $country_code = $this->Get_Country_Code();

            if( !$q = $this->_db->prepare("INSERT INTO `users` (`name`,`email`,`country_code`,`newsletter`) VALUES (?,?,?,?)") ) { printf('error on prepare'); }
            if( !$q->bind_param('sssi', $data['name'], $data['email'], $country_code, $optin)) { printf('error on bind'); }
            if( !$q->execute() )  { printf('error on execute'); }

            printf('Insert error %s', $this->_db->error);

            if( $this->_db->affected_rows == 0 ) {
                // There was a problem with the insert  

                printf('Insert error %s', $this->_db->error);
            }

            $q->close();
    }

Я также попытался добавить логическое значение в виде строки, но оно все равно не сработало.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 08 мая 2018
if( !isset($data['name']) || !isset($data['email']) || !isset($data['newsletter']) )
    $optin = ( $data['newsletter'] === 'on' ) ? 1 : 0;

В основном, если критерии для этого if не верны, то вы не "вводите" свой, если ваша переменная $ optin будет нулевой / неопределенной.

Если вы хотите избежать этого, есть 2 способа.

1) измените принятое значение в поле вашей рассылки в БД, чтобы принять ноль

2)

$optin=0;
if( !isset($data['name']) || !isset($data['email']) || !isset($data['newsletter']) ){
    if($data['newsletter'] === 'on' ){
        $optin=1;
    }
}

    $country_code = $this->Get_Country_Code();

Определите вашу переменную с "отрицательным" значением, которое вы хотите установить, если ваши критерии не соответствуют, и измените его внутри вашего if.

0 голосов
/ 08 мая 2018

Исправлено!

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

Мне нужно было назначить значение по умолчанию для тех столбцов, которые не будут заполнены при начальной INSERT.

Однако сообщение об ошибке не помогло.

enter image description here

0 голосов
/ 08 мая 2018

Разве вы не должны установить $ optin в true / false вместо 1/0?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...