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。正如您提到的,这不是特定于日期和时间的 - 使用任何表达式都会导致相同的结果。)
我想显示数据手册,但问题是我遇到了这个错误
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。正如您提到的,这不是特定于日期和时间的 - 使用任何表达式都会导致相同的结果。)