使用CodeIgniter将NULL插入数据库的正确方法

时间:2011-03-17 17:53:50

标签: php sql-server codeigniter extjs

我有ExtJS从combofield发布数据到CodeIgniter。 CodeIgniter读取发布的数据并运行db-> insert来更新mssql数据库。

问题是如果用户没有从组合框中选择它作为任何内容发送给CodeIgniter的选择,Codeignighter然后将这条发布的数据作为空字符串读取并尝试将其写入数据库中的int字段导致错误。

我相信我需要CodeIgniter将字符串视为NULL(如果它为空)和数字(如果是空的话)。我已经尝试使用php类型juggling(int)来转换它,但它使它为0.这是一个无效的值,因为它与我的数据库中我的一对多int字段中的任何选择都不匹配。

有没有办法让CodeIgniter将空字符串视为NULLS而不是空字符串?

[已编辑添加代码]

{
//ExtJS combo object
xtype: 'combo',
id: 'Referrer',
store: new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({
        url: '/referrals/index.php/referrers/read',
        method: 'POST'
    }),
    reader: new Ext.data.JsonReader({
        root: 'results',
        fields: [
            {name: 'ID'},
            {name: 'Referrer'}
        ]
    })
}),
displayField: 'Referrer',
valueField: 'ID',
value: 1,
typeAhead: true,
hiddenName: 'Referrers_ID',
mode: 'remote',
triggerAction: 'all',
fieldLabel: 'Referrer',
selectOnFocus: true,
anchor: '100%'
}

//CI CODE TO GRAB FROM POST INTO AN ARRAY THEN OUT TO THE DB
public function create(){
    $data = array(  
        'FirstName' => $this->input->post('FirstName', false),
        'LastName' => $this->input->post('LastName', false),
        'DOB' => $this->input->post('DOB', false),
        'Email' => $this->input->post('Email', false),
        'Phone' => $this->input->post('Phone', false),
        'StudentNo' => $this->input->post('StudentNo', false),
        'Sex' => $this->input->post('Sex', false),
        'Advisors_ID' => $this->input->post('Advisors_ID', false),
        'DateSeen' => $this->input->post('DateSeen', false),
        'Classifications_ID' => join(",", $this->input->post('Classifications_ID', false)),
        'Referrers_ID' => $this->input->post('Referrers_ID', false),
        'Referrals' => $this->input->post('Referrals', false),
        'ReferralNotes' => $this->input->post('ReferralNotes', false),
        'Registration1' => $this->input->post('Registration1', false),
        'Registration2' => $this->input->post('Registration2', false),
        'Notes' => $this->input->post('Notes', false)
    );

    $this->db->insert('Clients', $data);
    $insert_id = $this->db->insert_id();
}

3 个答案:

答案 0 :(得分:10)

假设您的变量名为$ myvar 并假设您在此之前已完成所有错误检查,验证和转换。

$myvar  = empty($myvar) ? NULL : $myvar;

这将为codeignitor提供正确的数据。

答案 1 :(得分:2)

有两种方法可以解决上述问题。

首先,您只需将数据库(假设您正在使用MySQL)从“NOT NULL”更改为“NULL”,这样MySQL就会自动将空字符串转换为NULL,并且不需要更改代码。< / p>

其次,您可以运行查询以告知CodeIgniter将字符串作为空白

$r = ($this->input->post('r') != FALSE) ? $this->input->post('r') : NULL;

如果您需要更频繁地使用'null'函数,请考虑在CodeIgniter中使用函数形式的代码创建库或帮助程序。

答案 2 :(得分:0)

这对我有用:)每当输入值为NULL或空

时,我都会分配双引号字符串
for($x = 0 ; $x < $count ; $x++) {
    foreach(array_keys($_POST) as $col) {
        $data[$this->col_prefix.$col] = empty($_POST[$col][$x]) ? "''" :  $_POST[$col][$x];
    }
    if($this->transaction_detail_model->add_transaction_detail($data)) {
        $flash_data = array('status' => 1, 'message'=> 'Transaction successful saved!');
    }   
}