-1

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[07002]: [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error' in .../db.php:46 Stack trace: #0 .../db.php(46): PDOStatement->execute() #1 .../tests/testDb.php(12): ReportsDB->runSP('CALL ...', Array) #2 {main} thrown in .../db.php on line 46

我正在处理的一些代码上出现此错误。我在调试此特定错误消息时遇到问题。

这是封装第 46 行的内容(我将突出显示实际行)。

public function runSP ($sp, array $args) {

    $returnParams = array();

    if ($sp) {

        $s = explode(" ", $sp);
        if ($s[0] != "CALL") {
            $sp = "CALL " . $sp;
        }

        $stmt = $this->_db->prepare($sp);

        if (sizeof($args) > 0) {

            for ($i = 0; $i > sizeof($args); $i++) {

                $stmt->bindParam($i, $args[$i]["value"], $args[$i]["type"]);

                $t = explode("|", $args[$i]["type"]);
                if ($t[1] == "PDO::PARAM_INPUT_OUTPUT") {
                    $returnParams[] = $args[$i]["value"];
                }
            }

Line 46     $stmt->execute();

            return $returnParams;

    } else {

    }

}
4

1 回答 1

0

我之前做过这个,也有同样的错误。这是我解决我的方法。

1.) 看看您的查询。确保您没有调用表上不存在的列名。

2.) 列名的数量和占位符的数量必须匹配。

3.) 在你的 for 循环中,不是将 counter($i) 初始化为 0,而是将其初始化为 1。这样你就说在循环的第一次迭代中,你绑定了数组的第一个值 ($args [$i-1]["value"]) 到查询的第一个占位符。所以应该是:

for ($i = 1; $i <= count($args); $i++){
          $stmt->bindParam($i, $args[$i - 1 ]["value"], $args[$i - 1]["type"]); 
}

希望这可以帮助。它对我有用。祝你好运。

于 2014-04-09T07:02:13.067 回答