簡體   English   中英

…/ db.php:46中的消息“ SQLSTATE [07002]:[Microsoft] [SQL Server Native Client 11.0] COUNT字段不正確或語法錯誤”的“ PDOException”

[英]'PDOException' with message 'SQLSTATE[07002]: [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error' in …/db.php:46

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.)查看您的查詢。 確保您未調用表中實際上不存在的列名。

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"]); 
}

希望這可以幫助。 它為我工作。 祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM