Только переменные должны передаваться по ссылке - при использовании LIMIT с bindParam

Я хочу использовать 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

Второй параметр bindParam должен быть существующей переменной, а не результатом функции. Сохраните результаты в переменной и затем используйте их при необходимости.

vuryss 19.06.2018 11:16

@vuryss спасибо, теперь работает, но почему я не могу сделать это напрямую?

popop 19.06.2018 11:17

Просто удалите intval.

revo 19.06.2018 11:18

Потому что функции нужно где-то хранить результат. Возвращаемое значение метода - это не место, где вы можете хранить значение. Вы пытаетесь сохранить значение в ответе intval, что является недопустимым действием.

vuryss 19.06.2018 11:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
251
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно изменить:

$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

Вы дважды работаете с типом данных. Вам не нужен intval, если явно указан PDO::PARAM_INT. Просто удалите intval или, чтобы узнать причину, используйте bindValue:

$sql->bindValue(":contact_number", intval($args["contact_number"]));

Другие вопросы по теме