Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как в SQL запросе использовать доп. запросы? PDO, redbeanphp, подготовленные запросы.

Marvin Знаток (320), закрыт 5 лет назад
Пример как я делал раньше:

if(isset($_GET['id'])){$dopSqlid = "WHERE `id` = '$_GET[id]'";}
$test= mysqli_query($db, "SELECT * FROM `users` $dopSqlid");

т. е. Если данная переменная $_GET['id'] существует то в SQL встраивалась доп часть SQL. Всякие фильтры сортировки и т. д.

Понятно что код приведенный выше фуфло и подвержен SQL инъекциям. Но это лишь пример для того чтобы понять суть.

Теперь я начал использовать ORM RedBean и подготовленные запросы. И встал в ступор как составить правильно запрос из нескольких. Неужели необходимо делать что-то вроде этого:

if(isset($_GET['id'])){
$test= R::find("users","id = :id", [':id' => $_GET[id]]);
}else{
$test= R::find("users","", []);
}

Да, так можно сделать. Но когда это только одна переменная. А когда их много. Какая же огромная получится конструкция if/else?

В общем я в ступоре.
Лучший ответ
Ученик (117) 5 лет назад
Есть пошаговая инструкция в интернете
Остальные ответы
Артем Петров Знаток (431) 5 лет назад
if(isset($_GET['id'])){$dopSqlid = "WHERE `id` = '$_GET[id]'";}
Ну, во-первых, так делать нельзя, запрос уязвим к sql-инъекции. Если у БД достаточно прав - прощай сайт, т. к. загрузят web shell. Даже если есть ограничение прав - прощай БД.

Используй Prepared Statements (как ты их назвал - подготовленные запросы).

Некоторые источники для MySQLi:
1) http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
2) https://www.w3schools.com/php/php_mysql_prepared_statements.asp

Источники для PDO:
1) http://php.net/manual/en/pdo.prepared-statements.php
2) https://websitebeaver.com/php-pdo-prepared-statements-to-prevent-sql-injection

» Да, так можно сделать. Но когда это только одна переменная. А когда их много. Какая же огромная получится конструкция if/else? «
Вот этого не понял, подробнее
Похожие вопросы