新增保存返回值问题
发布于:2022-01-17 09:50:54
#1 Genius
问题说明:norabn不选,保存,数据库有记录,但是return $this->create($rows);无返回值。
var $pk = "regcod";
var $table = "bloinf";
function insertBloinf($data, $user)
{
$rows = array('regcod' => $data['s_regcod'],
'insdat' => $data['insdat'],
'norabn' => $data['norabn'],
'WBC' => $data['WBC'],
'HB' => $data['HB'],
'Hct' => $data['Hct'],
'Plt' => $data['Plt'],
'remark' => $data['remark'],
'creman' => $user['usrcod'],
'cretim' => date('Y-m-d H:i:s'));
return $this->create($rows);
}
<%html_radios name="norabn" options=$data.norabns checked=$data.bloinf.norabn separator=" "%>
2014-04-04 11:30:56
#2 jake
dump一下返回的结果看看
2014-04-04 11:37:46
#3 Genius
dump为空,但是把radio,换成文本框,不填写,则有返回值。返回值为ID。
2014-04-04 11:40:50
#4 jake
create是如果存在自增ID就会返回,如果没有自增ID就没有返回了。
2014-04-04 12:06:55
#6 Genius
如果没有返回值,我没办法判断数据库操作成功了。
2014-04-04 12:16:36
#7 Genius
if(!is_array($row))return FALSE;
$row = $this->__prepera_format($row);
if(empty($row))return FALSE;
foreach($row as $key => $value){
$cols[] = $key;
$vals[] = $this->escape($value);
}
$col = join(',', $cols);
$val = join(',', $vals);
$sql = "INSERT INTO {$this->tbl_name} ({$col}) VALUES ({$val})";
if( FALSE != $this->_db->exec($sql) ){ // 获取当前新增的ID
if( $newinserid = $this->_db->newinsertid() ){
return $newinserid;
}else{dump($this->find($row, "{$this->pk} DESC",$this->pk));
return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
}
}
return FALSE;
Array
(
[regcod] => 28
)
28
2014-04-04 12:23:54
#8 Genius
不是自动增长,会返回这句。
$this->find($row, "{$this->pk} DESC",$this->pk)
dump($row)
Array
(
[regcod] => 26
[insdat] => 2014-04-04
[norabn] =>
[WBC] =>
[HB] =>
[Hct] =>
[Plt] =>
[remark] =>
[creman] => 1
[cretim] => 2014-04-04 12:26:31
)
而保存的时候
INSERT INTO gdwk_bloinf (regcod,insdat,norabn,WBC,HB,Hct,Plt,remark,creman,cretim) VALUES ('26','2014-04-04',NULL,'','','','','','1','2014-04-04 12:28:42')
在数库里比较的时候,就会出现''=null,不成立,所以没返回值
2014-04-04 12:28:35
#9 Genius
保存在数据库里的数据导出SQL文
INSERT INTO `gdwk_bloinf` (`regcod`, `insdat`, `norabn`, `WBC`, `HB`, `Hct`, `Plt`, `remark`, `creman`, `cretim`, `updman`, `updtim`) VALUES
(26, '2014-04-04', NULL, '', '', '', '', '', 1, '2014-04-04 13:03:56', NULL, NULL);
2014-04-04 13:07:21
#10 Genius
保存返回执行return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
执行的SQL文
SELECT regcod FROM gdwk_bloinf WHERE regcod = '26' AND insdat = '2014-04-04' AND norabn = NULL AND WBC = '' AND HB = '' AND Hct = '' AND Plt = '' AND remark = '' AND creman = '1' AND cretim = '2014-04-04 13:03:56' ORDER BY regcod DESC LIMIT 1
2014-04-04 13:10:14
#11 Genius
数据库中 null 表示 不可知,不确定 所以 判断都用 字段 is null的方式进行判断 而 = null 、<> null 的判断结果,仍然是不可知,不确定,所以 不会返回任何结果。 或者简单说: = null、 <> null 的判断结果都是 false。
2014-04-04 13:13:58
#12 Genius
找到findAll($conditions = null, $sort = null, $fields = null, $limit = null)函数
把语句$condition = $this->escape($condition);
修改成
if ($condition=="NULL"){$join[] = "{$key} IS {$condition}";}else
$condition = $this->escape($condition);
就OK了。
2014-04-04 13:31:40
#13 Genius
上一条写错
找到findAll($conditions = null, $sort = null, $fields = null, $limit = null)函数
把语句$join[] = "{$key} = {$condition}";
修改成
if ($condition=="NULL"){$join[] = "{$key} IS {$condition}";}else
$join[] = "{$key} = {$condition}";
就OK了。
2014-04-04 13:40:32
#14 jake
Genius 发表于 2014-4-4 13:40
上一条写错
找到findAll($conditions = null, $sort = null, $fields = null, $limit = null)函数
把语句$j ...
分析得不错,不过 null 和 'null' 是两个不同的东西。所以在编程的时候,注意别把它们弄混就行。
2014-04-04 14:45:30
#15 Genius
$condition = $this->escape($condition);
处理后用is_null,试过没用处
老大是把speedphp框架修改一下?还是,我怕自己改了以后升级出问题
2014-04-04 15:00:46
#16 Genius
可能是这样改更合理一点,因为用户可能是会检索输入"NULL"
if (is_null($condition)){$join[] = "{$key} IS NULL";}else
{
$condition = $this->escape($condition);
$join[] = "{$key} = {$condition}";
}
2014-04-04 15:23:02
#17 jake
null作为条件的情况比较少见,我想问题在于
if(is_null($value))return 'NULL';
我看看怎么搞
2014-04-04 15:43:30
#18 jake
jake 发表于 2014-4-4 15:43
null作为条件的情况比较少见,我想问题在于
if(is_null($value))return 'NULL';
按你说的方式,修改了Model,把条件那种都变成了null的判断,代码在:
https://git.oschina.net/SpeedPHP/dev非常感谢你的指出和研究。
PS:本帖将转移到bug意见区
2014-04-04 15:57:52
#19 mebtime
这个问题确实很实在,我也有用到
2014-04-11 17:44:40