2014-09-22 53 views
0

我想通過創建我自己的類來簡化我的數據庫函數。
其中一個功能是綁定的。之前的工作,但現在它做了一些奇怪的事情
的代碼是:goind這個PDO綁定函數有什麼問題?

protected function tInsert(&$connection, $table, $data, $replaceSpecials){ 
    $sql = $this->createSqlQuery($table, $data); 

    $stmt = $connection->prepare($sql); 

    /* THIS WORKS 
    $stmt->bindParam(":username", $data["username"]); 
    $stmt->bindParam(":pass_hash", $data["pass_hash"]); 
    $stmt->bindParam(":salt", $data["salt"]); 
    $stmt->bindParam(":email", $data["email"]); 
    $stmt->bindParam(":sex", $data["sex"]); 
    $stmt->bindParam(":birthday", $data["birthday"]); 
    $stmt->bindParam(":code", $data["code"]); 
    */ 

    // THIS DOESNT 
    $stmt = $this->bind($stmt, $data, $replaceSpecials); 

    $stmt->execute(); 
} 

private function bind($stmt, $data, $replaceSpecials){ 
    if ($replaceSpecials) 
     foreach($data as $k => $d){ 
      $d = str_replace("<", "&lt;", 
       str_replace(">", "&gt;", $d)); 
      $stmt->bindParam(":" . $k, $d); 
     } 

    else if (!$replaceSpecials) 
     foreach($data as $k => $d) 
      $stmt->bindParam(":" . $k, $d); 

    else return $this->bind($stmt, $data, false); 
    return $stmt; 
} 

我確信我正確格式化我的數據。
註釋掉的部分工作,而當我嘗試它與我的自定義綁定功能 它不起作用。
它以前的其他功能..
它也不是sql查詢..我確定它在某處的綁定函數。

我的最後結果是每個列都填滿了最後一個給定的參數。
(在這種情況下將是:代碼)

例如,這個陣列是數據

array (size=7) 
    'salt' => string 'b3d7201e14' (length=10) 
    'username' => string 'mister x' (length=8) 
    'pass_hash' => string 'd930f9a672bd12c9cf94aff748ca5bd100139bd5bdc7fafbdbfc8ad4bd79ba3c' (length=64) 
    'email' => string '[email protected]' (length=23) 
    'sex' => string 'm' (length=1) 
    'birthday' => string '25-11-1992' (length=10) 
    'code' => string '1ad21a5596cb556' (length=15) 

生成的SQL查詢:

INSERT INTO temp_users (salt, username, pass_hash, email, sex, birthday, code) 
VALUES(:salt, :username, :pass_hash, :email, :sex, :birthday, :code) 

回答

1

替換bindParam()bindValue()。 bindParam定義了一個用於執行查詢的變量名稱。所以,當你的循環結束時,所有的變量都綁定到$d,在查詢的執行點上它具有最後一次迭代的值。

通過將其更改爲bindValue(),您可以設置函數調用時保留的值$d

+0

奇怪的是,它與其他功能一起工作..只有這一個沒有我所期望的。我感謝你的答案,它的工作! – 2014-09-22 11:44:30