За последние 24 часа нас посетили 21969 программистов и 1104 робота. Сейчас ищут 726 программистов ...

PDO::ATTR_EMULATE_PREPARES (true || false) ?

Тема в разделе "PHP для новичков", создана пользователем AlexandrS, 11 мар 2019.

  1. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Не редкий вопрос, вроде и есть ответы, но я всё не могу понять.
    Есть такой ответ:

    И тут у меня меня возникает вопрос, т.е. в состоянии false мы как добровольно лишаем себя той самой полезной фитчи как prepare() или независимо от true или false prepare() всегда будет работать, если это так, тогда я не пойму эти true и false.
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @AlexandrS, а если прочитать то, что написано в цитате?
     
  3. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Прочитать это одно, вопрос в понимании, если бы я понял, осознал о чем конкретно там говорится, я бы не задавл вопросов, возможно этот вопрос и кажется глупым, но я не позиционируюсь как спец, раздел для новичков.
     
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @AlexandrS, да там по другому и не скажешь, вся информация в этой цитате. Само слово "эмуляция" говорит о чём-то?
    При true в PDO эмитируется работа prepare, а в бд передаётся готовыё чистый запрос, при false работает механизм prepare самой БД.
     
  5. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    @Valick Задам вопрос по другому.
    Как я понимаю, суть подготовленных запросов, заключается в защите от SQL инъекций.
    Что будет, если сделать запрос с SQL инъекцией, при true и false ?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @AlexandrS, если ATTR_EMULATE_PREPARES , то для каждого параметра вызывается PDO::quote (автоматически), и запросы идут уже готовые, без вопросов и прочего в базу.

    Если же родные запросы, то в базу идёт отдельно запрос, отдельно данные. Для MySQL это выглядит так: https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html. И тут как раз и идёт приемущество, чтобы один раз сделать prepare и много раз execute, типа ускорение (одна из функций подготовленных запросов, помимо защиты запроса от искажения через данные)
    --- Добавлено ---
    Если кодировка соединения правильно установлена, то в обоих случаях будет защита от инъекций. Если кодировка соединения не верно установлена, то могут пройти некоторые трюки. @Fell-x27 вроде где-то их показывал
     
    AlexandrS нравится это.
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @AlexandrS, если вас на улице задержали патрульные, то они могут вас обшмонать, дать пару раз по почкам не отходя от кассы и доставить в отделение уже "подготовленным", а могут доставить в отделение и там вас будет уже трусить дежурный. Требуемые действия могут выполнять разные подразделения внутренних сил, но результат одинаковый... 15 суток ;)
     
    AlexandrS и mkramer нравится это.
  8. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Более чем развернуто.
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    @Deonis
    эти примеры из реальной жизни имхо у тех кто сам не понял,
    отделение может не принять такой запрос: limit ?, ?
     
    AlexandrS нравится это.
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Это нюансы, а мы говорим о результате, если что.