Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mysqli::stmt - Подготовленные выражения 
:(
    Опции темы
baldina
Дата 12.11.2012, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



ну если для тренировки только, то наверно полезно.
жаль, поторопился, мог бы сэкономить время, если бы лучше продумал архитектуру: сплошной copy-paste
и интерфейс получился не слишком интуитивный, зачем мне вызывать специальную функцию delete или update, если я все-равно должен этот delete  или update продублировать на sql?
тем более что реализовано оно, мягко говоря, не разнообразно
Код

    /**
     * Выполнение REPLACE
     *
     * @param  string $query - строка запроса
     *
     * @return bool
     */
    public function replace($query)
    {
        $arguments = func_get_args();

        return call_user_func_array(array($this, 'i_query'), $arguments);
    }

    /**
     * Выполнение DELETE
     *
     * @param  string $query - строка запроса
     *
     * @return bool
     */
    public function delete($query)
    {
        $arguments = func_get_args();

        return call_user_func_array(array($this, 'i_query'), $arguments);
    }

 smile 
PM MAIL   Вверх
Gold Dragon
Дата 12.11.2012, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



baldina, замечая в тему и уже были озвучены. Функции разделены, т.к. в ближайшее время исправлю ситуацию с
Цитата(baldina @  12.11.2012,  09:40 Найти цитируемый пост)
зачем мне вызывать специальную функцию delete или update, если я все-равно должен этот delete  или update продублировать на sql?



То что код получился не слишком интуитивный, согласен. Сейчас конечно мне он понятен, но раньше пришлось по ломать голову. Я ранее писал что за основы и идею взял чужой код, который был работоспособен и отвечал моим "хочу". Но весь код построен на ссылках, я а это очень не люблю..Начал исправлять - полезли ошибки. Т.ч. пока оставил так. 

В конечно итоге конечно все постараюсь переделать. Для конечного пользователя это никоем образом не скажется

Сейчас задача избавится от лишнего.. т.е. если insert и ему подобные, то в sql-запросе этого не должно быть


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 12.11.2012, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(baldina @  12.11.2012,  08:40 Найти цитируемый пост)
 зачем мне вызывать специальную функцию delete или update, если я все-равно должен этот delete  или update продублировать на sql?

Хотя бы по тому, что обработка результатов запроса разная. Для инсерта нужно выдать last_insert_id, а для Delete - количество удаленных строк. Вообще - довольно полезно иметь selectCell, selectRow, insert, delete, update, и т.д. для разных вариантов возвращаемых данных. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 17.11.2012, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 1
Всего: 60



Я как то месяца 4 назад страдал такой же ерундой только в стиле PDO страдал чисто для себя и иза того что нужно было узнать предварительный результат сформулированного запроса в PDO с этим беда.

Мне вот с кешем не понравилось как у вас сделано я сделал у себя просто вызов метода до выполнения prepare и execute  query просто как метод
Цель метода указать использовать каширование
Код

bd::make()->cache()->prepare($sql)->execute(array(':id'=>'12') );


В данном случаи это просто установка флага в классе и инициализация через конфиг адаптера под каширование 
Код

public function cache($flag = true){
    $this->cache = (bool)$flag;
    if(is_null( $this->cacheAdapter){
       $this->cacheAdapter = cache::make(  confing::get('cache') );
    }
   return $this;
}


В методах execute query реализована обычная проверка на наличие включения включенного кеша.

В методах feach() реализован схожий функционал PDO получения результата кеша как будто из базы работаем
feachAll работает по прицепу отдать все

В данный момент пишу обучалку ИИ для этого дела что бы медленные запросы система сама кашировала.
Спасибо knsk за идею с шаблонными запросами
Я ток одном месте их использовал при наличии в название таблицы {{table}} подставлять прификс таблицы ( понравилась мне эта фишка в Yii ).

Чуть не забыл почему я выбрал PDO:
Гибче, абстракнее, приятный синтаксис написания,  по скорости: проигрывает капельку mysqli (где то видел тест но сам не проверял).
А именованные плэйсхолдеры повышает наглядность и эффективность использования в отличии от mysqli где просто "?" где иногда просто заставляет считать вопросики...
Хоть сам PDO и поддерживает плэйсхолдеры в стиле "?" (честно не пользовался)....

Планов у меня много и идей хоть отбавляй ( вот времени всегда мало)


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
baldina
Дата 17.11.2012, 21:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(ksnk @  12.11.2012,  11:21 Найти цитируемый пост)
Хотя бы по тому, что обработка результатов запроса разная.

неубедительно. вопрос был, не зачем что-то делать, а зачем что-то делать дважды.

PM MAIL   Вверх
ksnk
Дата 17.11.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(baldina @  17.11.2012,  21:39 Найти цитируемый пост)
а зачем что-то делать дважды.

В смысле?
писать 
Код

...->select('Select ...

Так?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 19.11.2012, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



да
PM MAIL   Вверх
ksnk
Дата 19.11.2012, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



baldina, На мой взгляд - первое из этих слов ->select необходимо, так как оно определяет формат ожидаемого мной оответа. Второе, если эстетические чувства протестуют - можно подставлять внутри функции. Мои эстетические чувства не протестуют. А вот подстановка в некоторых(не всех) функциях - странное и не совсем логичное действие.

Можно делать как DBSimple - выяснять результат, анализируя начало строки запроса. На мой взгляд - это непроизводительная потеря и так нерезинового времени.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 19.11.2012, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



можно сделать много чего, в т.ч. красиво и эффективно.
я всего лишь указал на сей недостаток (и Gold Dragon согласился)
PM MAIL   Вверх
ksnk
Дата 19.11.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(baldina @  19.11.2012,  11:31 Найти цитируемый пост)
можно сделать много чего, в т.ч. красиво и эффективно.
я всего лишь указал на сей недостаток (и Gold Dragon согласился) 

Ok! Согласен. Пусть решает дракон  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 19.11.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(baldina @  19.11.2012,  12:31 Найти цитируемый пост)
можно сделать много чего, в т.ч. красиво и эффективно.
я всего лишь указал на сей недостаток (и Gold Dragon согласился) 
Согласился, но кажется по горячился...

Тут я поразмышлял малость и прикинул... Допустим я всё упрощаю и удаляю "повторы" в этом
...->insert("INSERT...
Тогда мне нужно передавать не строкой запроса, а переменными

Возьмём запрос для вставки.
Код

->insert("INSERT INTO `#__table` (`id`, `name`, `date`) VALUES (?, ?, ?);", array(4, 'Антон', '2012-11-07'))

Сейчас тут
1 - Запрос
2 - массив с переменными

Если мы хотим избавится от "избыточности", то нам нужно передавать
1 - имя таблицы
2 - массив с именами полей
3 - массив с переменными
и вызов будет примерно такой
Код

->insetr('#__table', array(`id`, `name`, `date`), array(4, 'Антон', '2012-11-07'))


Теперь если взять "обновление" и сделать по подобию
Код

->update("UPDATE `#__table` SET `date`=? WHERE `id`=? AND `name`=?", array('2012-11-07', 3, 'Пётр'))

То нам нужно передавать 
1 - имя таблицы
2 - массив с именами полей
3 - массив с переменными
4 - массив с именами полей в условии
5 - массив с переменными условия
И получается что-то типа такого
Код

->update('#__table', array('date'), array('2012-11-07'), array('id','name'), array(3, 'Пётр'))


Вот тут то и вопрос: "А не слишком это всё усложняет и загромождает систему?"

Добавлено через 2 минуты и 41 секунду
и это если запросы простые без вложенности

Это сообщение отредактировал(а) Gold Dragon - 19.11.2012, 14:33


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 19.11.2012, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(Gold Dragon @  19.11.2012,  14:32 Найти цитируемый пост)
Вот тут то и вопрос: "А не слишком это всё усложняет и загромождает систему?"

По-моему поздно пить боржоми smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 19.11.2012, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(Fortop @  19.11.2012,  15:55 Найти цитируемый пост)
По-моему поздно пить боржоми 
адсолютно не поздно.. В крайнем случае можно сделать дополнительные методы



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 19.11.2012, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Тут обсуждается построитель запросов? Как показывает практика, строить достаточно адекватно удается только простые запросы. Всякая сложность потребует неадекватного усложнения построителя. Можно посмотреть на сложность activeRecord  в Yii, например.

Тонкость в том,что вся эта сложность нужна ТОЛЬКО для генерации строки SQL. Зачем ее генерировать, если можно просто ее явно  записать? 

Строка SQL может зависеть от конкретного sql-транспорта и незначительно меняться в зависимости от него. Почему бы не пойти по пути "многоязыковых" приложений и не сделать словарь SQL запросов, если действительно нужно работать в нескольких местах? Запросов в приложении не может быть уж очень много, так что словарь вполне реален.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 19.11.2012, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



ksnk, не совсем уловил мысль.. На примере покажи


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.