SQLSTATE[IMSSP]: 试图绑定参数号 65536。SQL Server 最多支持 2100 个参数

时间:2021-01-18 09:56:56

标签: php sql-server stored-procedures pdo

我想问一下这是什么错误。我想向 PHP 显示报告书,但结果如图所示

Error

这是我的报告书:

public function GetReportBook($id_book, $TanggalStart, $TanggalEnd)
    {
        // select all query
        try {
            require_once 'Database.php';
            $sqlsrvquery = (" EXEC [dbo].[GetReportBook] @id_book=id_book, @TanggalStart=TanggalStart, @TanggalEnd=TanggalEnd");
            // prepare query statement
            $stmt = $this->conn->prepare($sqlsrvquery);
            $stmt->bindParam('id_book', $id_book, PDO::PARAM_STR);
            $stmt->bindParam('TanggalStart', $TanggalStart, PDO::PARAM_STR);
            $stmt->bindParam('TanggalEnd', $TanggalEnd, PDO::PARAM_STR);
            $stmt->execute();
            while($r = $stmt->fetch(PDO::FETCH_OBJ)) {
                print_r($r);
            }


        } catch (Exception $e) {
            print_r($e->getMessage());
        }
    }
}

这是在 ASP.NET 中显示的结果:

ASP.NET

1 个答案:

答案 0 :(得分:1)

您需要考虑以下几点:

  • 您需要在 prepared 语句中使用命名 (:name) 或问号 (?) 参数标记。
  • 您需要对 yyyymmdd:TanggalStart 参数的值使用明确的日期时间格式(在您的情况下为 :TanggalEnd)。

一个例子,基于你的代码:

public function GetReportBook($id_book, $TanggalStart, $TanggalEnd)
    {
        // select all query
        try {
            require_once 'Database.php';
            $sqlsrvquery = ("
               EXEC [dbo].[GetReportBook] 
                   @id_book = :id_book, 
                   @TanggalStart = :TanggalStart, 
                   @TanggalEnd = :TanggalEnd
            ");
            // prepare query statement
            $stmt = $this->conn->prepare($sqlsrvquery);
            $stmt->bindParam(':id_book', $id_book, PDO::PARAM_STR);
            $stmt->bindParam(':TanggalStart', date('Ymd', strtotime($TanggalStart)), PDO::PARAM_STR);
            $stmt->bindParam(':TanggalEnd', date('Ymd', strtotime($TanggalEnd)), PDO::PARAM_STR);
            $stmt->execute();
            while($r = $stmt->fetch(PDO::FETCH_OBJ)) {
                print_r($r);
            }
        } catch (Exception $e) {
            print_r($e->getMessage());
        }
    }
}