【问题标题】:SQLSTATE[IMSSP]: Tried to bind parameter number 65536. SQL Server supports a maximum of 2100 parametersSQLSTATE[IMSSP]: 尝试绑定参数号 65536。SQL Server 最多支持 2100 个参数
【发布时间】:2021-04-22 14:49:30
【问题描述】:

我想问一下这是什么错误。我想向 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 中显示的结果:

【问题讨论】:

  • 使用:id_book 而不是id_book 作为$this->conn->prepare$stmt->bindParam 中的参数名称。您需要在 prepared 语句中使用命名 (:name) 或问号 (?) 参数标记。
  • 谢谢。但结果是 SQLSTATE[22007]:[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]varchar 数据类型到 datetime 数据类型的转换导致值超出范围。
  • $TanggalStart$TanggalEnd 变量的值使用明确的日期时间格式(yyyymmddyyyy-mm-ddThh:mm:ss)。顺便说一句,这些变量的实际值是多少(var_dump($TanggalEnd) 返回什么)?
  • 实际上是根据 Input TanggalStart 和 TanggalEnd 检查报告的值

标签: php sql-server stored-procedures pdo


【解决方案1】:

您需要考虑以下几点:

  • 您需要在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());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2020-11-10
    • 2022-08-04
    • 1970-01-01
    相关资源
    最近更新 更多