2012-03-13 72 views
2

由于某些原因,当我从Zend执行mysql db插入操作时,我的行被打乱了。我试过通过phpmyadmin直接插入,它的工作原理非常完美,所以它不是mysql服务器的问题。Zend在mysql插入上重复行

这是我使用的代码:

<?php 

class Model_Team extends Zend_Db_Table_Abstract { 

    protected $_name = 'team'; 

    public function createUser($data) { 
     $user = $this->createRow(); 
     $user->name = $data['name']; 
     $user->title = $data['title']; 
     $id = $user->save(); 
     return $id; 
    } 
} 

?> 

在此先感谢。

编辑:

我发现,虽然形式后是正常的,不是一个Ajax请求)

+0

只要确定:1.-您是否在“Firebug/Chrome开发人员工具”中查看网络选项卡以检查帖子是否仅发送一次? 2.-您是否检查过在应用程序中仅调用一次createUser方法? – arraintxo 2012-03-13 10:41:29

回答

1

我不知道为什么你的代码是双重保存数据库,但它应该不重要,因为你使用Row对象和save()。 (save()插入或更新)
您可能需要重构createUser()函数,以便在该行已存在时不能创建新行。

<?php 

class Model_Team extends Zend_Db_Table_Abstract { 

protected $_name = 'team'; 

public function createUser(array $data) { 

    $user = $this->createRow(); 
    //test if user has id in the array 
    if (array_key_exists('id', $data)){ 
     $user->id = $data['id']; 
    } 
    $user->name = $data['name']; 
    $user->title = $data['title']; 
    $user->save(); 
    //no need to create a new variable to return the user row 
    return $user; 
    } 
} 

此方法将创建并更新用户行。

为了进一步帮助您,我需要查看控制器代码,大部分双泵都发生在那里。

+0

如果存在自动增量,则无法一直使用。 – kta 2015-09-26 13:01:44

0

而不是使用这种复制只有当我打电话通过AJAX(模盒)的形式出现, createRow()你尝试过使用insert()吗?

/** 
* Insert array of data as new row into database 
* @param array $data associative array of column => value pairs. 
* @return int Primary Key of inserted row 
*/ 
public function createUser($data) 
{ 
    return $this->insert($data); 
} 

另外 - 我们可以看到ajax代码吗?可能是表单也被张贴了?

+0

使用$ this-> insert()还会复制条目。我正在使用facebox jquery插件来处理模式框。 – MGP 2012-03-13 10:38:07