За последние 24 часа нас посетили 72515 программистов и 3554 робота. Сейчас ищут 2555 программистов ...

Вопрос по PDO

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vladimirovich, 13 мар 2023.

  1. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    Добрый день, вопрос касается плейсхолдера в запросе SQL. Код ниже почему-то не работает. Просто не хочется в запросе оставлять переменную. Может подскажете почему?

    PHP:
    1. $sql = "SELECT*FROM :magic"; - обращение к таблице
    2.  
    3. $query = $pdo->prepare($sql);
    4. $query->execute(['magic'=> 'users']);
    ошибка:
    Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users'' at line 1 in

    От модератора: для кода кнопка </>
     
    #1 Vladimirovich, 13 мар 2023
    Последнее редактирование модератором: 13 мар 2023
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.831
    Симпатии:
    1.335
    Адрес:
    Лень
    названия таблиц, лимит, колонки и т.д. не должны подставляться как значения данных
     
  3. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    Хорошо). Данный запрос размещен в функции. В параметрах пробрасывается название таблицы с данными. В аргументах при вызове может указываться любая другая таблица.

    Если оставить переменную в запросе , то там наверное sql инъекции всякие? Как нормальные поцаны пишут безопасный код?
     
  4. dantemgs

    dantemgs Новичок

    С нами с:
    24 дек 2022
    Сообщения:
    47
    Симпатии:
    9
    А есть вариант не позволять пользователю вводить название таблицы?;)
     
    artoodetoo нравится это.
  5. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    Ну как бы нет такой цели позволять, что-то подобное. Но какой-нибудь умник может найти её и дописать все что угодно в запрос.
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.198
    Симпатии:
    183
    Код (Text):
    1. SELECT * FROM TABLE WHERE column=:magic;'
     
  7. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    К сожаление тоже не работает.
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.831
    Симпатии:
    1.335
    Адрес:
    Лень
    еще раз читаем
    --- Добавлено ---
    и еще
    --- Добавлено ---
    а потом еще
    --- Добавлено ---
    и напоследок перед сном
     
  9. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    C удовольствием бы прочёл, но ничего не отображается...
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.858
    Симпатии:
    656
    У Димона ошибка: TABLE – ключевое слово (нужно брать в кавычки).

    А Маус написал, что имя таблицы нельзя подставлять через плейсхолдер (если это действительно нужно, используйте др. методы – белые списки и т.п.).
     
  11. Vladimirovich

    Vladimirovich Новичок

    С нами с:
    13 мар 2023
    Сообщения:
    8
    Симпатии:
    0
    Ок, спасибо всем за ответы.