我是一般的CodeIgniter和PHP的新手。我用一些非空列創建了一個新表。非空列都根據其數據類型設置了默認值,因此VARCHAR具有空字符串,而數字類型的默認值爲0。將缺省值留空的非空列爲空時會出現MySQL錯誤1366
但是,一旦我填寫表格(在這裏我故意留下非空列留空,以測試它們),並點擊提交按鈕,它提供了以下錯誤:
Error Number: 1366
Incorrect integer value: '' for column 'salary' at row 1
它插入當發現用戶沒有輸入任何值時,爲空字符串添加雙引號。我檢查了檢查mysql模式,它被轉到嚴格模式。但是,因爲我使用的是多租戶數據庫(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');
MODEL:
//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;
UPDATE:我插入多個列的值具有相同的INSERT語句。
也顯示代碼。 –
絕對包括你的代碼在問題中。它對調試有很大的幫助。我在這裏猜測,但它聽起來像你把任何值插入到表單中,並直接注入數據庫。這通常是不好的做法,你需要在輸入數據庫之前對輸入進行清理和驗證。否則,它爲SQL注入和攻擊留下了空間。 – khuderm