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());
}
}
}
想请教一下这是什么错误。我想向 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());
}
}
}