PHP 错误异常:在第 259 行的 C:\xampp\htdocs\library-api\master.php 中,仅应通过引用传递变量

PHP Error Exception : Only variables should be passed by reference in C:\xampp\htdocs\library-api\master.php on line 259

我想显示数据手册,但问题是我遇到了这个错误

 Notice: Only variables should be passed by reference in C:\xampp\htdocs\library-api\master.php on line <i>259</i></th></tr>

这是我的 master.php

public function GetReportBook($id_book,$TanggalStart, $TanggalEnd)
{
    
    $sqlsrvquery = "
    EXEC [dbo].[GetReportBook] 
    @id_book = ?, 
    @TanggalStart = ?,
    @TanggalEnd = ?";
    $stmt = $this->conn->prepare($sqlsrvquery);
    $stmt->bindParam(1, $id_book, PDO::PARAM_STR);
    $stmt->bindParam(2, date('Ymd', strtotime($TanggalStart)), PDO::PARAM_STR);
    $stmt->bindParam(3, date('Ymd', strtotime($TanggalEnd)), PDO::PARAM_STR);
    $stmt->execute();
    if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $report_arr = array(
            "status" => true,
            "id_book" => $row['id_book'],
            "book_name" => $row['book_name'],
            //etc
        );
    } else {
        $report_arr = array(
            "status" => false,
            "message" => "Invalid Get Report Book!",
        );
    }
    print_r(json_encode($report_arr));
}

有什么解决办法吗?因为我认为错误是由于日期时间

您在第二次和第三次调用 bindParam 时传递的是表达式而不是变量。正如通知所说,通过引用传递时只能使用变量。 bindParam documentation 明确表示该函数的第二个参数是通过引用传递的。

所以,像这样尝试:

$startStr = date('Ymd', strtotime($TanggalStart));
$endStr = date('Ymd', strtotime($TanggalEnd));
$stmt->bindParam(2, $startStr, PDO::PARAM_STR);
$stmt->bindParam(3, $endStr, PDO::PARAM_STR);

(N.B。正如您提到的,这不是特定于日期和时间的 - 使用任何表达式都会导致相同的结果。)