swaro
@swaro
Nice code - awesome bugs

Почему не получается использовать плейсхолдер внутри JSON (RedBeanPHP)?

Здравствуйте! У меня есть задача: проверить, апвоутил ли "$username" запись с идентификатором "$id". Для этого я написал следующее (БД PostgreSQL):
$foo = R::getRow('SELECT "votes"::jsonb @> \'{"upvote":[":username"]}\'::jsonb AS "is_upvoted" FROM "pages" WHERE "id" = :id', [":id"=>$id,":username"=>$username];

Проблема в том, что я получаю ошибку HY093 (судя по гуглу, эта ошибка появляется при неудачах с плейсхолдерами)

Потом я пытался экранировать кавычки внутри JSON строки, так, чтобы получилось:
\'{\"upvote"\:[\":username\"]}\'
Результат тот же.

После я пытался вообще убрать кавычки возле ":username", так, чтобы было:
\'{"upvote"\:[:username]}\'
Но получаю всю ту же ошибку.

Но, когда я не использую плейсхолдер в месте ":username", т.е, когда код выглядит так:
$foo = R::getRow('SELECT "votes"::jsonb @> \'{"upvote":["'.$username.'"]}\'::jsonb AS "is_upvoted" FROM "pages" WHERE "id" = :id', [":id"=>$id];

операция происходит успешно и я получаю свой результат. Конечно, сейчас я использую свою, проверенную переменную, но потом я хочу использовать подобный запрос для пользовательского поиска, и понимаю, что это небезопасно, поэтому хочу попросить здесь помощи: в чем причина и как это можно решить?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
попробуй '' (дважды одинарная) вместо \'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы