PHP无法解释的错误,参数号无效:绑定变量的数量与令牌的数量不匹配

时间:2016-05-06 10:48:40

标签: php pdo

我无法在代码中发现错误,而且我总是收到以下错误:

例外' PDOException' with message' SQLSTATE [HY093]:参数号无效:绑定变量的数量与令牌的数量不匹配' "

尝试从表单提交一些输入时。

if (isset($_GET['createNewBox'])) {

  if (!empty($_POST['tableName']) and !empty($_POST['commentFullAddress'])) {

    try{

        $sql = 'CREATE TABLE :tableName (
            id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
            customerid INT,
            item TEXT,
            pin INT(11) NOT NULL,
            position VARCHAR(5),
            storedate DATE NOT NULL,
            storetime TIME NOT NULL
            ) DEFAULT CHARACTER SET utf8 ENGINE=INNODB COMMENT=":commentFullAddress"';
        $statement = $pdo -> prepare($sql);
        $statement -> bindValue(':tableName', $_POST['tableName']);
        $statement -> bindValue(':commentFullAddress', $_POST['commentFullAddress']);

        if ($statement -> execute()) {

            session_start();
            $_SESSION['messageSucceed'] = "A new database has been created for the box.";
            header('Location: /?managebox');
            exit();
        }   

    } catch (PDOException $e) {

        $error_output = "Error on creating new box database: " . $e;
        include '../error.html.php';
        exit();
    }

  } else {

    session_start();
    $_SESSION['message'] = "Please do not submit empty data.";
    header("Location: /?managebox");
  }
}

1 个答案:

答案 0 :(得分:2)

您的代码有两个问题。

首先,这个:

CREATE TABLE :tableName

您无法在PDO中绑定表格,因此您需要使用变量或来自安全列表。

然后,您在绑定COMMENT=":commentFullAddress"';的值周围使用引号,并且需要删除这些引号。

旁注: TBH,我不知道你为什么要使用准备好的陈述作为评论,我以前从未见过。

参考文献:

另外,请确保这些POST数组包含值。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

您也可能需要将bindValue更改为bindParam,我说&#34;可能&#34;。

<强>脚注:

我不明白为什么您要使用此代码创建表格,而单独来自用户输入。这是您的决定,但除非您尝试创建某种形式的数据库托管服务,否则我不会看到它的原因。