参数号无效:绑定变量数与令牌数不匹配

时间:2016-11-22 06:53:29

标签: php pdo

这个标题有很多问题,但没有一个能够解决我的问题而且我不知道WTH? 这是一个简单的代码php,将数据添加到表

mongoimport --host localhost --port 37017 --username user --password pass --collection collectionName --db databaseName --file fileName

Catch block没有执行但是给出了错误。

  global $connPDO;
    ini_set('date.timezone', 'Asia/Karachi');
    $date = date('Y-m-d H:i:s');

    $sql = "INSERT INTO `pqa` VALUES (null, :ProId, :ProQuestion, null, '$date', null)";
    $queryInsert = $connPDO->prepare($sql);

    try {
        //Post contain $_POST["ProId"], $_POST["ProQuestion"];
        $querySuccess = $queryInsert->execute($_POST);
        echo $querySuccess;
    }
    catch(Exception $e) {
        echo '<h1>An error has ocurred.</h1><pre>', $e->getMessage() ,'</pre>';
    }

令人惊讶的成功日志显示此警告,也没有插入任何数据。

  

(!)警告:   PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:   绑定变量的数量与令牌的数量不匹配   C:\ wamp \ www \ ESP \ ESP.php上线    5621 的............................

2 个答案:

答案 0 :(得分:2)

当你在做什么

$queryInsert->execute($_POST);

您正尝试将全局后置数组中的所有绑定到数组中的各自索引作为占位符。当您提交ajax时,您将发送以下数据

var data = {
    "action" : "SaveProjectNewQuestion",
    "ProId" : 1,
    "ProQuestion" : $jqueryLib("#NewQuestion").val()
};

这里有三个项目,但你只是试图绑定其中两个,导致绑定数量和值数量不匹配,即使你想要绑定的两个索引匹配占位符的名称 - 因为您的action不是查询中的占位符。

通常我会使用整个POST数组避免这样做。绑定只有两个变量,我宁愿直接绑定它们,就像这个

$queryInsert->execute(array("ProId" => $_POST['ProId'], 
                            "ProQuestion" => $_POST["ProQuestion"]));

答案 1 :(得分:1)

您需要修复执行语句的方式。由于您要定义( :ProId, :ProQuestion )绑定/参数,因此需要将构造数组传递给->execute(...),如下所示:

$binds = array(
    ':ProId' => $_POST['ProjectId'],
    ':ProQuestion' => $_POST['ProjectQuestion']
);
$querySuccess = $queryInsert->execute($binds);