-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 に答える