今天在写程序时碰到了一个问题,我的数据结构如下:
使用表单传递参数:
<div id="msg_div" style="display:none;">
<form action="<?php echo url('pm/sendmsg');?>" method="post">
<p>
<label>标 题</label>
<input name="title" type="text" />
</p>
<p>
<label>收件人</label>
<input type="text" name="recived_id" value="4,3" />
</p>
<p>
<label class="v_top">内 容</label>
<textarea rows="4" cols="40" name="content"></textarea>
</p>
<p>
<label> </label>
<input type="hidden" name="pm_type" value="2" />
<input type="submit" value="Send Message"/>
</p>
</form>
</div>
经过一系列的数据处理之后得到我要的数据数组,输出结果为:
然后我把得到的数据用模型的save()方法存入到数据库中:
$pm_list_mod = new Pmlists($pm_list);
$pm_list_mod->save();
一切都没有问题,可是在前台显示的时候却不正确了,然后我查看保存到数据库中的记录时,奇迹发生了:
这是为什么?前面我们已经知道传递的值应该是2,可以保存到数据库中却成了1。所以前台显示的时候当然就不正确了,这是什么原因呢,在保存之前我们输出一下新建的模型实例:
$pm_list_mod = new Pmlists($pm_list);
echo '<pre>';
print_r($pm_list_mod);
echo '</pre>';
exit();
得到结果:
可见在这个时候我们传递的值就已经改变了,为什么会这样呢?原因是什么,我百思不得其解。最后只能求助经理了;原来在QeePHP框架中 tinyint 类型的数据会被当作布尔类型BOOL/BOOLEAN数据来使用,会自动将数据的值转换。此时恍然大悟,其实这样的设计也不无道理,我们在用 phpMyadmin 建立数据表时是不支持 Bool 型的数据的,这样一来如何识别呢?当然用 tinyint 类型来解决就可以了。
原因找到,现在要解决问题了,修改表的结构:
然后再次测试,查看保存的数据:
可以看到数据插入成功了。
由此可见,我们在设计数据库时还是要考虑全面一点的,当处理不是太大的整形数据时我们可以设置 int 型字段的长度来达到我们所要的效果。
记录此问题纯粹为了方便以后的查阅,如果有不足之处,你可以告诉我哦。