【问题标题】:PDO error code HY093, yet number of bound variables does match the number of tokens [duplicate]PDO 错误代码 HY093,但绑定变量的数量与令牌的数量匹配 [重复]
【发布时间】:2015-08-13 07:13:11
【问题描述】:

我有以下php函数,检查了无数次。

我查看了大约 30 个关于 HY903 错误代码的不同问题。但是,它们似乎都不适用。

我检查了列数,占位符的数量,我检查了拼写是否一致。我什至在 if(!is_null){} 中包含了可能为空的值,但似乎没有任何东西可以改变这个错误。我必须遗漏一些小东西,但我一辈子都找不到它是什么。

function add_page($title, $linkStub, $content,$gitTitle,$buttonLabel,$buttonLink,$buttonText,$buttonTarget)
{
    $sql = "INSERT INTO `pages`(
            `pageId`,
            `title`,
            `linkStub`,
            `content`,
            `gitTitle`,
            `buttonLabel`,
            `buttonLink`,
            `buttonText`,
            `buttonTarget`
            )
            VALUES (
            NULL ,
            :title ,
            :linkStub ,
            :content ,
            :gitTitle ,
            :buttonLabel ,
            :buttonLink,
            :buttonText,
            :buttonTarget
            )";

    $stmt = $this->db->prepare($sql);

    $stmt->bindParam(':title', $title, PDO::PARAM_STR, 100);
    $stmt->bindParam(':linkStub', $linkStub, PDO::PARAM_STR, 150);
    $stmt->bindParam(':content', $content, PDO::PARAM_STR);
    if(!is_null($gitTitle))
    {
        $stmt->bindParam(':gitTitle', $gitTitle, PDO::PARAM_STR, 150);
    }
    if(!is_null($buttonLink))
    {
        $stmt->bindParam(':buttonLabel', $buttonLabel, PDO::PARAM_STR, 150);
        $stmt->bindParam(':buttonLink',  $buttonLink, PDO::PARAM_STR, 150);
        $stmt->bindParam(':buttonText', $buttonText, PDO::PARAM_STR, 100);
        $stmt->bindParam(':buttonTarget', $buttonTarget, PDO::PARAM_INT, 2);
    }
    $bool = $stmt->execute();
    print_pre($stmt->errorInfo()); //Uncomment for error reporting
    return $bool;
}

编辑:

这个问题与您标记这些问题的问题不重复,因为绑定数量不正确,这是处理 Robbie Averill 指出的 NULL 值。

【问题讨论】:

  • 所以,如果 $gitTitle 或 $buttonlink 为空,绑定的参数将会减少......
  • 是的,Robbie Averill 指出了同样的事情。谢谢

标签: php pdo


【解决方案1】:

你只绑定一些参数,如果它们的值不为空。你应该在执行语句之前处理你的错误,而不是执行,或者只是绑定 null。

使用未绑定的参数无法成功执行 PDO,因此这可能是您收到该错误的原因。

【讨论】:

  • 谢谢你,我做到了,我最初有 else 语句,它会像这样绑定 else { $stmt->bindParam(':gitTitle', $gitTitle);但是,我认为当时我有一个错字,所以忽略了这个问题。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2022-01-22
  • 2015-07-31
  • 1970-01-01
  • 2014-03-15
相关资源
最近更新 更多