SpeedPHP技术交流论坛

 找回密码
 论坛注册

QQ登录

只需一步,快速开始

搜索
查看: 793|回复: 1

create逻辑错误

[复制链接]

9

主题

0

好友

40

积分

武林新贵

Rank: 4

发表于 2011-8-15 11:19:16 |显示全部楼层
原代码如下:
  1. public function create($row)
  2. {
  3. if(!is_array($row))return FALSE;
  4. $row = $this->__prepera_format($row);
  5. if(empty($row))return FALSE;
  6. foreach($row as $key => $value){
  7. $cols[] = $key;
  8. $vals[] = $this->escape($value);
  9. }
  10. $col = join(',', $cols);
  11. $val = join(',', $vals);

  12. $sql = "INSERT INTO {$this->tbl_name} ({$col}) VALUES ({$val})";
  13. if( FALSE != $this->_db->exec($sql) ){ // 获取当前新增的ID
  14. if( $newinserid = $this->_db->newinsertid() ){
  15. return $newinserid;
  16. }else{
  17. return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
  18. }
  19. }
  20. return FALSE;
  21. }
复制代码


如果表没有设置pk的话(允许表没有pk),这里用create就会出错,具体是:
return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
因为没有设置pk,所以,这里的sql会构造出select * from xxx order by desc,造成语法错误。

修复:

  1. public function create($row)
  2. {
  3.   if(!is_array($row))return FALSE;
  4.   $row = $this->__prepera_format($row);
  5.   if(empty($row))return FALSE;
  6.   foreach($row as $key => $value){
  7.    $cols[] = $key;
  8.    $vals[] = $this->escape($value);
  9.   }
  10.   $col = join(',', $cols);
  11.   $val = join(',', $vals);
  12.   $sql = "INSERT INTO {$this->tbl_name} ({$col}) VALUES ({$val})";
  13.   if( FALSE != $this->_db->exec($sql) ){ // 获取当前新增的ID
  14.    if( $newinserid = $this->_db->newinsertid() ){
  15.     return $newinserid;
  16.    }else{
  17.     if ($this->pk)
  18.      return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
  19.    }
  20.   }
  21.   return FALSE;
  22. }
复制代码

加上一句:if ($this->pk)即可。

该贴已经同步到 syber的微博

48

主题

0

好友

3074

积分

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2011-8-15 12:27:21 |显示全部楼层
原则上是不允许不设置pk值的。即使该表没有pk,也可以设定一个。

当然,这个原则可以考虑改变一下。
提问前注意:请先查手册、搜索本站和搜索论坛来查找答案,大部分问题都在手册和论坛旧贴中能够得到解答!

提问时注意要把问题说清楚,最好包括:代码、错误提示、截图等
您需要登录后才可以回帖 登录 | 论坛注册

手机版|Archiver|SpeedPHP.com ( 粤ICP备08008671号 )  

GMT+8, 2012-5-19 02:02

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部