PDO Transaction + Prepare,undefined parameter

时间:2014-02-18 17:40:05

标签: php 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 个答案:

答案 0 :(得分:1)

替换它,

:keyval

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

进入

:keyvalue