SQLSTATE[IMSSP]: 尝试绑定参数编号 65536。SQL 服务器最多支持 2100 个参数

SQLSTATE[IMSSP]: Tried to bind parameter number 65536. SQL Server supports a maximum of 2100 parameters

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

这是我的报告书:

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 中显示的结果:

您需要考虑以下几点:

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

基于您的代码的示例:

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());
        }
    }
}