Я хочу использовать LIMIT с bindParam, поэтому создаю этот запрос:
$app->get('/contact/get_contacts/{contact_number}', function (Request $request, Response $response, array $args)
{
$query = "SELECT * FROM contact LIMIT :contact_number";
$sql->bindParam("contact_number", intval($args["contact_number"]), PDO::PARAM_INT);
$sql->execute();
$result = $sql->fetchAll();
return $response->withJson($result);
});
Я получаю это уведомление:
Only variables should be passed by reference
Что я сделал не так? Я использую Slim Framework с PDO
@vuryss спасибо, теперь работает, но почему я не могу сделать это напрямую?
Просто удалите intval.
Потому что функции нужно где-то хранить результат. Возвращаемое значение метода - это не место, где вы можете хранить значение. Вы пытаетесь сохранить значение в ответе intval, что является недопустимым действием.






Вам нужно изменить:
$sql->bindParam("contact_number", intval($args["contact_number"]), PDO::PARAM_INT);
с участием,
$sql->bindParam(":contact_number", $args["contact_number"], PDO::PARAM_INT);
: перед именем параметра.intval, если вы все еще хотите использовать функцию, используйте ее вне вызова функции bindParam.Согласно определению функции:
public bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
связанный параметр - переменная по ссылке (&$variable).
Материал для чтения
Второй параметр bindParam должен быть существующей переменной, а не результатом функции. Сохраните результаты в переменной и затем используйте их при необходимости.