2014-01-28 98 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插件),但無論如何它是固定的。謝謝