Php 选择在SQL中提交的空列表

Php 选择在SQL中提交的空列表,php,mysql,kohana,Php,Mysql,Kohana,我有一个选择列表,如下所示 <select name="0[voicemail]" > <option value="" selected="selected"></option> <option value="800">800</option> <option value="801">801</option> <option value="802">802</option> <op

我有一个选择列表,如下所示

<select name="0[voicemail]" >
<option value="" selected="selected"></option>
<option value="800">800</option>
<option value="801">801</option>
<option value="802">802</option>
<option value="803">803</option>

<option value="805">805</option>
<option value="807">807</option>
<option value="808">808</option>
<option value="809">809</option>
<option value="810">810</option>
<option value="811">811</option>
<option value="820">820</option>
<option value="830">830</option>
<option value="831">831</option>

<option value="9778">9778</option>
<option value="9995">9995</option>
</select>
这里的问题是,我将empty选项的值设置为“NULL”,但是因为Kohana在它插入的所有内容周围添加了逗号,所以它会尝试将“NULL”放入数据库中,而不是NULL。在这种情况下,这将违反外键约束

在PHP/Kohana中是否有一种简单的方法来处理NULL,这样我就不必检查是否为空,也不必多次重写可能包含NULL的每个查询。
当您可以获得多个有效的空值时会发生什么?当然有一种方法可以简单地处理这些类型的情况吗?

在数据库更新之前放置此代码似乎可以解决问题。即,将$val['voicemail]设置为PHP常量NULL

if (empty($val['voicemail'])){
   $val['voicemail'] = NULL;
}

然后我可以继续使用原始SQL语句。Kohana似乎有自己的行为,在update语句中设置NULL。

您可以使用
DB::expr
方法,该方法不会在查询中转义该值。这样就可以插入原始
NULL


然而,我很惊讶你使用了一个面向对象的框架,却因为创建了一个混乱的表单而放弃了所有的优势。工作保障?

一点也不。事实上,我不认为形式是那么丑陋。我见过更糟的。也许你能给我一个更好的方法?
 foreach($detail as $key => $val){
       $this->db->query("UPDATE dids SET cid_prefix=?, dial_timeout=?, voicemail=?, notes=? WHERE did=?", 
         array($val['cid_prefix'], 
             $val['dial_timeout'], 
             $val['voicemail'], 
             $val['notes'], 
             $val['did']));                   
if (empty($val['voicemail'])){
   $val['voicemail'] = NULL;
}