M函数的BUG还是我不会用?

浏览:667 发布日期:2013/10/18 分类:求助交流 关键字: M函数
表结构很简单一个ID,自增和一个nameCREATE TABLE IF NOT EXISTS `hd_test` (
  `id` mediumint(8) unsigned NOT NULL auto_increment COMMENT '主键(自增长)',
  `name` varchar(200) default '' COMMENT '名称',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='测试' AUTO_INCREMENT=1 
PHP代码也很简单 M("Test")->getById(1);
$model = M("Test");
$model->name="测试";
$model->add();
当数据库中没有ID为1的的记录时
执行结果如下SHOW COLUMNS FROM `hd_test` [ RunTime:0.003417s ]
SELECT * FROM `hd_test` WHERE ( `id` = 1 ) LIMIT 1 [ RunTime:0.000918s ]
INSERT INTO `hd_test` (`name`) VALUES ('测试') [ RunTime:0.000463s ] 
当数据库中存在了ID为1的记录时


执行结果如下SHOW COLUMNS FROM `hd_test` [ RunTime:0.003307s ]
SELECT * FROM `hd_test` WHERE ( `id` = 1 ) LIMIT 1 [ RunTime:0.001279s ]
INSERT INTO `hd_test` (`id`,`name`) VALUES (1,'测试') [ RunTime:0.000324s ] 
会自动把自增的字段ID带进去,导致添加失败。

$model->add();
之前如果不查询的话。M("Test")->getById(1);
那么就正常。不会吧ID带进去。


是BUG?还是我不会用?





补充:可能是我不会用。我的应用场景是这样的。
我是用于二级栏目的
我的表结构是ID,NAME,PID

用户提交的NAME和PID。

检查ID=PID的记录是否存在,如果存在就添加记录,不存在就报错。$pid=isset($_REQUEST["pid"])?$_REQUEST["pid"]+0:0;
if($pid<=0)$this->error('父类必须选择!');
if(!M("Test")->getById($pid))$this->error('父类不存在!');
$model = M("Test");
$model->name="测试";
$model->pid=$pid;
$model->add();
代码如上。
请问我该怎么做?因为这样做的话。SQL语句会变成INSERT INTO `hd_test` (`id`,`name`,`pid`) VALUES (1,'测试',1)其实我要的是INSERT INTO `hd_test` (`name`,`pid`) VALUES ('测试',1)但前面的if(!M("Test")->getById($pid))$this->error('父类不存在!');这个校验父类是否存在的校验必须有。

麻烦你了。谢谢

最佳答案
评论( 相关
后面还有条评论,点击查看>>