ФорумРазработкаБазы данных → Возможно ли "сохранение" mysqli::prepare?

Возможно ли "сохранение" mysqli::prepare?

  • [da_smag]

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 21 февраля 2010 г. 15:31

    Здравствуйте. Возможно ли 1 раз выполнить mysqli::prepare(<запрос>), каким-то образом сохранить результат (жалательно в mysql) и использовать его в различных скриптах, в которых не нужно будет заново делать mysqli::prepare(<запрос>), а можно будет сразу переходить к mysqli_stmt::bind_param?

    То есть можно ли в mysql создать таблицу с подготовленными запросами, что бы вдальнейшем посылать только данные и id подготовленного запроса?
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 21 февраля 2010 г. 18:03, спустя 2 часа 32 минуты 18 секунд

    [da_smag], кеш?
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 21 февраля 2010 г. 18:47, спустя 43 минуты 38 секунд

    [da_smag], вы предполагаете что мускуль за вас это не делает?
    Сапожник без сапог
  • [da_smag]

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 22 февраля 2010 г. 7:14, спустя 12 часов 27 минут 30 секунд

    SpartakuS, я не знаю, как точно это называется.. но я хочу сделать так:
    один раз создать подготовленное выражение, как-то сделать, что бы рнр его запомнило, а потом использовать его много раз и из разных скриптов без предварительной подготовки (то есть сразу mysqli_stmt::bind_param, а затем mysqli_stmt::execute)
    Впринципе в mysql 5.1 можно сделать подготовленное выражение только sql запросом, но потом ему передавать данные с помощью mysqli::query, а что бы избавиться от sql-injection использовать mysqli::real_escape_string. А последнее загружает ЦП, в то время как mysqli_stmt::execute передаёт данные по-особому так, что данные проверки не требуют и в самой функции они не проходят эту проверку.

    phpdude, ну вообще-то предполагаю.. Но я задал вопрос, что бы узнать, можно ли сделать так, как я описал выше =)
  • [da_smag]

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 22 февраля 2010 г. 7:53, спустя 39 минут 2 секунды

    Наблюдение:
    если создать подготовленное выражение средствами mysql, то есть
    PREPARE asdf FROM 'SELECT ? FROM tbl';

    затем закрыть сессию, снова войти и попытаться выполнить это подготовленное выражение, то mysql выдаст ошибку:
    ERROR 1243 (HY000): Unknown prepared statement handler (asdf) given to EXECUTE


    Так что, уважаемый phpdude, мускул этого не делает =)
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 22 февраля 2010 г. 8:28, спустя 34 минуты 30 секунд

    Чего-то непойму, в чем сакральный смысл сего действа? Ты пытаешься переложить кеширование с фс/мэмкеша на базу данных?
    … а что бы избавиться от sql-injection использовать mysqli::real_escape_string. А последнее загружает ЦП…

    абасраца аргумент =)
    И что, насколько сильно у тебя нагружает процессор эксейпирование строки по сравнению с выполнение запроса например?
    Work, buy, consume, die
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 22 февраля 2010 г. 8:29, спустя 1 минуту

    Так что, уважаемый phpdude, мускул этого не делает =)
    я не это имел ввиду. а то, что препаре он не парсит каждый раз, а использует кеш. это раз

    во вторых, ваш тест - более чем очевиден, зачем он вообще проводился? :)
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!