'PDOException',消息'SQLSTATE [07002]:[Microsoft] [SQL Server Native Client 11.0] COUNT字段不正确或语法错误'in ... / db.php:46

时间:2014-02-11 13:47:52

标签: php pdo singleton sqlsrv

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 {

    }

}

1 个答案:

答案 0 :(得分:0)

我之前做过这个并且也有同样的错误。这是我如何解决我的问题。

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

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

3.。)在你的for循环中,不是将计数器($ 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"]); 
}

希望这会有所帮助。它对我有用。祝你好运。