2012-01-31 26 views
0

我很好奇,爲什麼這個代碼工作正常:PDO在PHP - 我可以綁定哪些參數查詢之外或不

function updateRecord($idFieldName, $recordID, $fieldName, $recordValue){ 
      $dbConnection=$this->dbConnect(); 
      $updated=false; 
      while (!$updated){ 
       $query=$dbConnection->prepare("UPDATE $this->table SET $fieldName = :recordValue WHERE $idFieldName = :recordID"); 
       $query->bindParam(":recordValue", $recordValue); 
       $query->bindParam(":recordID", $recordID); 
       $updated=$query->execute(); 
      } 
     } 

而這一次沒有:

function updateRecord($idFieldName, $recordID, $fieldName, $recordValue){ 
      $dbConnection=$this->dbConnect(); 
      $updated=false; 
      while (!$updated){ 
       $query=$dbConnection->prepare("UPDATE $this->table SET :fieldName = :recordValue WHERE $idFieldName = :recordID"); 
       $query->bindParam(":fieldName", $fieldName); 
       $query->bindParam(":recordValue", $recordValue); 
       $query->bindParam(":recordID", $recordID); 
       $updated=$query->execute(); 
      } 
     } 

我不明白查詢語句之外可以綁定哪些參數,哪些參數必須直接包含在語句中。

+0

發生了什麼或沒有發生什麼?如何在哪個代碼失敗? – 2012-01-31 22:19:37

+0

[PHP的PDO語句是否接受表名作爲參數?](http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-parameter) – 2012-01-31 22:21:54

回答

1

can't use dynamic column names as data parameters in PDO(也不在任何其他PHP SQL庫AFAIK)。

您必須將列名直接插入到字符串中。爲了避免SQL注入,您應該將列名與現有的有效列名稱列表進行比較。

+0

有趣。謝謝! – JDelage 2012-01-31 22:26:55

+0

在我的情況下,'$ fieldName'不是用戶輸入,它來自我的代碼。我想在這種情況下,我不需要switch語句。我想通過集中這些價值觀可以獲得某些東西,但這會以可讀性爲代價。 – JDelage 2012-01-31 22:32:58