![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Gold Dragon |
|
||||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
Читаю литературу и везде один и тот же пример.. Общую теорию освоил:
- т.е. мы готовим запрос ->prepare() с вопросительными знаками - далее связываем типы с данными ->bind_param() - и выполняем запрос ->execute() На первый взгляд очень всё понятно, наглядно и безопасно. Но возникло несколько вопросов, которые я так и не могу реализовать.. Допустим у меня есть "обёртка" MySQLi. Где-то в начале я подключаюсь в базе.. Далее при необходимости я делаю два вызова метода класса обёртки: первый - формирую сам запрос, второй - то что хочу получить. Например
Т.е. отправляю запрос, строку с типами (число и строка) и массив с данными Следующим запросом я хочу получить допустим ассоциативный массив с объектами в формате
И соответственно делаю запрос
И тут возникают проблемы.. Во-первых, в bind_param нужно перечислять переменные, а значит массив не покатит. Во-вторых, не совсем понятно как мне доставать результат. Кто уже активно работает с этим прошу научить ;) а если есть готовая обёртка, то буду просто рад Это сообщение отредактировал(а) Gold Dragon - 27.10.2012, 11:15 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||||
|
|||||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Или я не очень понял сути, или все зависит от фреймворка, не?
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
Я делаю CMS в том числе сейчас пишу обёртку для MySQLi. Вернее у меня уже есть класс для работы с mysqli, но хочу её переделать чтобы использовать mysqli_stmt. Но что-то пока не могу понять как этим вообще пользоваться. На простых примерах всё просто, а вот сделать что-то универсальное пока не получается. Т.е. когда не известно сколько и каких данных поступает в запросе и в каком формате выдать результат
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
У Котерова в книге PHP5 можно прочитать про placeholders, впервые я это увидел там (еще до появления многих фрейморков). Вообще не очень понятно зачем что-то возвращать, или имеется ввиду внутренний механизм? Если так, то там просто идет замена ? на значения массива.
|
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
Может не совсем понятно объяснил... В общем чтобы получить какой-либо результат мне нужно вызвать два метода "обёртки"
Первый формирует сам запрос, т.е. всё подставляет: меняет префиксы таблицы в соответствии с настройками движка, проверяет входные данные на соответствие и т.п. и т.д. Сейчас использую простое экранирование для строк (mysqli_real_escape_string). А вот этот подход должен меня избавить от подобного и сам запрос будет безопаснее, да и работать с ним проще. А вот второй метод (вернее их множество) должен возвращать данные в том виде в котором я их хочу получить. Допустим, только первую строку или весь результат в ассоциативном массиве или же объектом или только первое значение первой строки и т.п. -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
Aliance, спасибо за книжку.. кажется есть по моей теме.. бегло пробежал, наверное именно то что я ищу. Правда я хочу это реализовать по другому.. но хотя бы будет от чего отталкиваться..
PS документации по mysqli_stmt практически вообще нет :( -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Вообще-то она есть, и называется PDO. Во всяком случае- методы именно оттуда. В нем есть, разной степени удобства, механизм подстановки параметров. Вместе с bindParam или прямо в execute массивом. Именованные параметры или вопросики по порядку и так далее... Другое дело, если ли в этом pdo поддержка mysqli_stmt? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
мне нужен не монстр, а маленький, удобный, понятный, простой класс
В принципе DbSimple это то что мне нужно, но немного не то что я хочу получить в идеале.. попробую сначала его поломать и посмотреть... -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 2 Всего: 101 |
||||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Если не смущают конструкции типа
на которые ругается синтаксически анализатор, начиная с 5-го php, то почему бы и нет. А вообще, вместе с Котеровской debugConsole - достаточно удобная штука. Хотя я от нее недавно отказался в пользу класса из instantCMS. Он там совсем никакой, даже сам не эскейпит параметры и его еще нужно допиливать, зато маленький и понятный -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
а разве его (DbSimple) не допилили до 5-й? А вообще. я уже не рассматриваю всё что ниже PHP5.3
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
| Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
В общем нашёл обёртку, практически то что мне нужно.. сделана как утверждает автор на основе DbSimple.
Правда стиль написания очень своеобразный: всё на ссылках, вызовах пользовательских функций и callback.. Да и как-то наследуемый класс получается вспомогательным для основного.. Очень не привычно... Честно говоря пока очень путаюсь... Но главное всё работает и отлично работает вот SVN http://code.google.com/p/simple-mysqli-class/ Выборку можно делать как так
так и вот так
Основные выборки Выборка строки: selectRow() Выборка ячейки: selectCell() Выборка столбца: selectCol() Выборка всего: select() Вставка данных: insert() Удаление: delete() Замена: replace() Очень маленький и ничего лишнего... Но вот пока думаю как туда своё добавить, очень непонятный и запутанный стиль написания кода, не люблю передавать ссылки на переменные, не понятно что и где берётся тогда Это сообщение отредактировал(а) Gold Dragon - 23.10.2012, 18:11 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
| Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 2 Всего: 71 |
В общем вот собрал класс-обёртку. Прошу посмотреть, оценить, покритиковать, дополнить, улучшить... в общем вы всё знаете сами
Постарался всё полностью прокомментировать.
Класс пишу для конкретного проекта, так что основные настройки получаю через псевдо-функцию по типу такой
Это сообщение отредактировал(а) Gold Dragon - 24.10.2012, 10:40 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 3 Всего: 42 |
Вопрос. как ты планируешь обращаться к свойству класс с именем ''? -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |