0

Хочу биндить переменные в массиве, но как совместить переменные запроса и параметры запроса в одном массиве и возможно ли это?

$name = 'Mike';
$limit = 2;

$user_data = [ 'name' => $name, 'limit' => $limit ];

$stm = $conn->prepare ("SELECT * FROM users WHERE name=:name LIMIT :limit"); $stm -> execute($user_data); $result = $stm->fetchAll();

foreach ($result as $row){ echo $row["name"]; }

Таким образом не выводится ничего, даже ошибки. Проблема именно в параметре LIMIT. Если его прописать руками, то всё будет работать, но возможно ли его прописать в массиве $user_data ?

  • Это должно работать. Включите отображение ошибок, возможно оно не включено https://ru.stackoverflow.com/a/701145/191482 ............. а что внутри $result в итоге лежит? – Алексей Шиманский Oct 12 '22 at 12:20
  • Это не будет работать ибо в мануале сказано "Все значения будут приняты, как имеющие тип PDO::PARAM_STR. ". Остается только bindValue с PDO::PARAM_INT. Либо манипуляции с PDO::ATTR_EMULATE_PREPARES – u_mulder Oct 12 '22 at 12:39
  • @u_mulder ну или переходить на ? – Алексей Шиманский Oct 12 '22 at 12:42
  • я правильно понимаю что либо переменные в array либо bindValue и то и то нельзя использовать? – Михаил Горячев Oct 12 '22 at 12:47
  • Ну открой уже руководство почитай https://www.php.net/manual/ru/pdostatement.execute.php#refsect1-pdostatement.execute-description – u_mulder Oct 12 '22 at 12:50
  • Там нет ответа на мой вопрос, по этому и пишу. И в интернете не нашёл примеров, где через массив задаются и переменные запроса и limit. Везде идут отдельно плейсхолдеры либо в переменных либо в лимите. Тогда вопрос другой. Я понимаю зачем нужно PDO и preparing запросы, но на сколько нужно задавать лимиты через эти плейсхолдеры, это что тоже не безопасно? – Михаил Горячев Oct 12 '22 at 19:25

0 Answers0