代码之家  ›  专栏  ›  技术社区  ›  Roger

Drupal 8 PDO Prepared Statements bindValue错误

  •  1
  • Roger  · 技术社区  · 10 年前

    我对这个查询有困难。此查询导致以下错误。

    PDOException:SQLSTATE[HY093]:参数编号无效:未绑定任何参数

    $sql = "INSERT IGNORE table SET user_id = :uid";
    if ($con = $connection->prepare($sql)) {
      $con->bindValue(':uid', intval($this->uid), PDO::PARAM_INT);
      $con->debugDumpParams();
      $con->execute();
    }
    

    参数

    Params:  1
    Key: Name: [4] :uid
    paramno=-1
    name=[4] ":uid"
    is_param=1
    param_type=1
    

    查询有效。

    $sql = "INSERT IGNORE table SET user_id = :uid";
    if ($con = $connection->prepare($sql)) {
        $con->execute([':uid' => intval($this->uid)]);
    }
    

    问题 为什么我不能将任何参数或值绑定到PDO准备的语句?

    我使用的是Drupal 8,我相信他们的连接会取代PDO默认驱动程序。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Roger    10 年前

    Drupal 8用Drupal用来插入、更新、准备语句等的自定义驱动程序替换了默认PDO驱动程序…这些驱动程序覆盖了默认操作。因此,如果您想要一个完整的自定义查询,您需要设置与Drupal分开的连接并使用它。

    $dsn = 'mysql:host=localhost;dbname=drupal';
    $username = 'username';
    $password = 'password';
    $connection = new PDO($dsn, $username, $password);
    

    然后使用自定义查询就可以了。你不会得到无参数绑定错误

    推荐文章