1

我正在尝试为每次提交表单时注册一个日期,但我不知道——我似乎无法弄清楚。我看了很多其他帖子,但似乎找不到答案。

这是我不断收到的错误:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

这是我的代码:

$query = "
    INSERT INTO coffee (
        name,
        ddown-num,
        txtDate,
        radio-ad,
        ddown-yn,
        sub-date
    ) VALUES (
        :name,
        :ddown-num,
        :txtDate,
        :radio-ad,
        :ddown-yn,
        now()
    )
";

$query_params = array(
    ':name' => $_POST['name'],
    ':ddown-num' => $_POST['ddown'],
    ':txtDate' => $_POST['txtDate'],
    ':radio-ad' => $_POST['agdis'],
    ':ddown-yn' => $_POST['yn']
);

我用单引号尝试了 "now()" 方法,我还用 ":sub-date => now()" 和 ":sub" 尝试了最后一个 ":sub-date" 而不是 "now()" -日期 => $当前日期”。$当前日期=现在();..但没有区别。

我试过这个:

try
{
    // Execute the query to create the user
    $stmt = $db->prepare($query);
    $stmt->bindValue(':name', $_POST['name']);
    $stmt->bindValue(':ddown-num', $_POST['ddown']);
    $stmt->bindValue(':txtDate', $_POST['txtDate']);
    $stmt->bindValue(':radio-ad', $_POST['agdis']);
    $stmt->bindValue(':ddown-yn', $_POST['yn']);
    $stmt->bindValue(':sub-date', date("Y-m-d"));

    $stmt->execute();
}

我究竟做错了什么?

4

1 回答 1

1

根据手册

不带引号的标识符中允许的字符:

  • ASCII:[0-9,az,AZ$_](基本拉丁字母,数字 0-9,美元,下划线)
  • 扩展:U+0080 .. U+FFFF

您对参数和列名都使用-减号。您应该使用反引号为列名引用这些,我会在参数中删除它们:

$query = "
    INSERT INTO coffee (
        name,
        `ddown-num`,
        `txtDate`,
        `radio-ad`,
        `ddown-yn`,
        `sub-date`
    ) VALUES (
        :name,
        :ddownNum,
        :txtDate,
        :radioAd,
        :ddownYn,
        now()
    )
";
于 2013-06-27T15:25:40.820 回答