2014-01-28 68 views
0

我知道这听起来像重复,但我不想用单个查询添加多行,我已经有这种工作。问题是我只需要插入一行。在一个查询中插入多个数据库行

我有两段代码执行这些操作。 第一个 - 注册页面:

$user = DB::getInstance()->insert('users', array(
    'username' => 'Sam', 
    'password' => 'password', 
    'salt' => 'salt' 

)); 

,然后在什么实际执行在一个单独的PHP类查询:

public function insert($table, $fields = array()) { 

    $keys = array_keys($fields); 

    $values = ''; 

    $x = 1; 



    foreach($fields as $field) { 
     $values .= "?"; 
     if($x < count($fields)) { 
      $values .= ', '; 
     } 
     $x++; 
    } 

    $sql = "INSERT INTO {$table} (`" . implode('`, `', $keys) . "`) VALUES ({$values})"; 
    if(!$this->query($sql, $fields)->error()) { 
     return true; 
    } 
    return false; 
}public function query($sql, $params = array()) { 
    $this->_error = false; 
    if($this->_query = $this->_pdo->prepare($sql)) { 
     $x = 1; 
     if(count($params)) { 
      foreach($params as $param) { 
       $this->_query->bindValue($x, $param); 
       $x++; 
      } 
     } 

     if($this->_query->execute()) { 
      $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_count = $this->_query->rowCount(); 
     } else { 
      $this->_error = true; 
     } 
    } 

    return $this; 
} 

相当多的,但我只是想包括一切。这是目前正在工作,它将记录输入到我的数据库中,唯一的问题是它每次输入2。

继承人SCREENSHHOT我的数据库的:

enter image description here

你可以从ID的我已经打算在这个代码,而现在看到的。我有一种感觉,很小的东西会把它扔掉,但我似乎无法找到它,需要一双新鲜眼睛的帮助。

+0

检查插入只被调用一次。还要考虑在模式中添加时间戳以确定插入的时间。 –

+0

@kzarns我添加的第一行代码是插入函数在文件中的任何地方被调用的唯一时间。据我所知,当页面第一次运行时,第一个条目发生正确,第二个条目在页面完成加载所有资源后进入。 –

回答

0

修正了它。我在Wordpress上运行这个代码并且运行了header.php文件。事实证明,在某些时候页面上运行两次,我只需要将代码包含在“页面”中。 (但当然PHP不希望在wordpress页面上运行,所以我需要使用exec php插件),但无论如何它是固定的。谢谢