- 最后登录
- 2012-3-31
- 在线时间
- 37 小时
- 个人主页
- 注册时间
- 2010-4-19
- 阅读权限
- 10
- 帖子
- 38
- 精华
- 0
- UID
- 489

|
发表于 2011-8-15 11:19:16
|显示全部楼层
原代码如下:- public function create($row)
- {
- 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{
- return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
- }
- }
- return FALSE;
- }
复制代码
如果表没有设置pk的话(允许表没有pk),这里用create就会出错,具体是:
return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
因为没有设置pk,所以,这里的sql会构造出select * from xxx order by desc,造成语法错误。
修复:
-
- public function create($row)
- {
- 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{
- if ($this->pk)
- return array_pop( $this->find($row, "{$this->pk} DESC",$this->pk) );
- }
- }
- return FALSE;
- }
复制代码
加上一句:if ($this->pk)即可。
该贴已经同步到 syber的微博 |
|