1

私は CodeIgniter と PHP 全般に不慣れです。特定の null 以外の列を含む新しいテーブルを作成しました。null 以外の列にはすべて、データ型に応じてデフォルトが設定されているため、VARCHAR には空の文字列が含まれますが、数値型にはデフォルトとして 0 が含まれます。

ただし、フォームに入力すると (null 以外の列を意図的に空白のままにしてテストします)、送信ボタンを押すと、次のエラーが発生します。

エラー番号: 1366

不正な整数値: 行 1 の列 'salary' の ''

ユーザーが値を入力していないことがわかると、空の文字列の二重引用符が挿入されます。mysqlモードを確認したところ、厳密モードになりました。ただし、マルチテナント DB (Azure-clearDB) を使用しているため、スーパー特権は許可されず、厳密モードをオフにすることはできません (または可能でしょうか?)。

このモードをオフにする方法はありますか、または他の回避策はありますか? ハードコーディングされるため、各列に SQL if-else 句を明示的に追加したくありません。助けてくださいコードは以下のとおりです。

コントローラ:

$additional_data = array(
                'first_name'    => $this->input->post('first_name'),
                'last_name'     => $this->input->post('last_name'),
                'phone'         => $this->input->post('phone'),
                'salary'        => $this->input->post('salary'));

if ($this->form_validation->run() == true && $this->ion_auth->register($username, $password, $email, $additional_data))
        {
        $identity = $this->ion_auth->where('email', strtolower($this->input->post('email')))->users()->row();
        $forgotten = $this->ion_auth->forgotten_password($identity->{$this->config->item('identity', 'ion_auth')});
        $this->session->set_flashdata('message', $this->ion_auth->messages());
        redirect('auth/success', 'refresh');

モデル:

    //filter out any data passed that doesnt have a matching column in the users table
    //and merge the set user data and the additional data
    $user_data = array_merge($this->_filter_data($this->tables['users'], $additional_data), $data);

    $this->trigger_events('extra_set');

    $this->db->insert($this->tables['users'], $user_data);

    $id = $this->db->insert_id();

    //add in groups array if it doesn't exits and stop adding into default group if default group ids are set
    if( isset($default_group->id) && empty($groups) )
    {
        $groups[] = $default_group->id;
    }

    if (!empty($groups))
    {
        //add to groups
        foreach ($groups as $group)
        {
            $this->add_to_group($group, $id);
        }
    }

    $this->trigger_events('post_register');

    return (isset($id)) ? $id : FALSE;

更新: 同じ挿入ステートメントで複数の列の値を挿入しています。

4

1 に答える 1

0

あなたの説明によると、列「給与」を整数列に設定しましたが''、空の文字列として挿入します。

そのため、列「給与」の0代わりに設定する必要があります。''

于 2016-03-09T04:46:59.550 に答える