2014-02-18 106 views
-1

我不能在這裏找到錯誤:PDO交易+準備,不確定參數

function updateDocKeywords($keywords, $docId) { 
    try { 
     $query = 'UPDATE keywords SET :keyname = :keyvalue WHERE document_id = :docId'; 
     $pdo = _openConnection(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $pdo->beginTransaction(); 
     $pdoStatement = $pdo->prepare($query); 
     foreach($keywords as $keyname=>$keyval) { 
     var_dump($keyname,$keyval,$docId); 
     $pdoStatement->bindParam(':docId', $docId, PDO::PARAM_STR); 
     $pdoStatement->bindParam(':keyname', $keyname, PDO::PARAM_STR); 
     $pdoStatement->bindParam(':keyval', $keyval, PDO::PARAM_STR); 
     $pdoStatement->execute(); 
     } 
     $pdo->commit(); 
     return true; 
    } 
    catch(PDOException $e) { 
     $pdo->rollBack(); 
     echo $e->getMessage(); 
     return false; 
    } 
    } 

在瀏覽器中我得到:

string(5) "Fecha" 
string(8) "20141122" 
string(4) "5233" 
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined 

而且在異常處理程序,PHPStorms警告我$pdo可能未被定義,這是另一個問題,爲什麼會這樣?

回答

1

替換此,

:keyval 

$pdoStatement->bindParam(':keyvalue', $keyval, PDO::PARAM_STR); 

:keyvalue 
+0

Agggrrr,我發誓,我看了一遍,再而沒有發現它。如果PDO剛剛告訴我,我會保存1小時的變量。 – JorgeeFG