Покинул форум
Сообщений всего: 5027
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
ух ты как все скадно у Вас здесь.
Вам указать явные ошибки или промолчать.
По факту где вы увидели у Вас работу с подготовленими запросами не знаю
Первим параметром в query передайте сам запрос, а вторым массив с данными. Делов-то.
И да у Вас неверный синглтон. По факту синглтон должен возвращать екземпляр обьекта. В то время у вас там идет только создание. наименование getInstance не делает то что нужно. Exception-ы не использованы. Впрочем ето не ООП, а какая-то каша с спагетти. Рекомендую переделать все заново
IllusionMH
Отправлено: 31 Января, 2014 - 12:04:32
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Kenshin, ИМХО вы неправильно используете этот синглтон.
Единственной задачей его должно быть вернуть инстанс и указатель на соедиение. Т.е. в итоге вам нужно в своей функции получить свойство MySQLi этого синглтона, а дальше работать как обычно.
В противном случае нужно еще и переписать все методы.
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
у меня в голове уже каша после прочтения всех материалов и я полностью запутался...
Спасибо за советы. Прочитал материалы еще раз, многое понял по новому. Многое понял, что раньше не понимал. Начал заново писать. Получилось так:
Но тогда нарушаеться инкапсуляция, ибо свойство публичное
OrmaJever
Отправлено: 31 Января, 2014 - 20:53:31
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Kenshin пишет:
class Database
Нет, нет, нет. Класс Database нужно забыть. Я понимаю что вы сильно хотите сделать singletone, тогда вот вам функция (я использую mysqli место PDO, т.к. лучше знаю его)
$p= mysqli()->prepare("SELECT `mail` FROM `userdata` WHERE `username`= ? AND `password`= ?");
$p->bind_param('ss',$log_d,$p_md5);
$p->execute();
$stmt->bind_result($mail);
while($stmt->fetch()){
echo$mail;
}
Что тут сложного?
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Kenshin
Отправлено: 31 Января, 2014 - 21:43:41
Новичок
Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
OrmaJever пишет:
Kenshin пишет:
class Database
Нет, нет, нет. Класс Database нужно забыть. Я понимаю что вы сильно хотите сделать singletone, тогда вот вам функция (я использую mysqli место PDO, т.к. лучше знаю его)
$p= mysqli()->prepare("SELECT `mail` FROM `userdata` WHERE `username`= ? AND `password`= ?");
$p->bind_param('ss',$log_d,$p_md5);
$p->execute();
$stmt->bind_result($mail);
while($stmt->fetch()){
echo$mail;
}
Что тут сложного?
С этим всё понятно...
Но у меня была другая задача. Незнаю или вообще можно так сделать или нет... но дело было так, напишу еще раз...
Была задача:
1. написать Класс синглетон для подключения к базе данных используя mysqli или PDO...
и другой класс, где уже обрабатывались данные с БД.
Это я вроде бы сделал... хотя криво по не опыту и не знанию... но все равно все работало....
2. Мой учитель взглянул на это все и дал задание, всё хорошо, но я должен подумать о prepared statement для минимизации SQL-инъекций...
Вот поэтому я и начал ломать голову, как это сделать и или вообще это можно сделать....
По задаче Класс синглетон должен остаться...
Вот я и не могу понять... или я совсем дурак и не понимаю.... или это мой учитель дурак и мне дурацкое задание дает....
OrmaJever
Отправлено: 31 Января, 2014 - 21:51:24
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Kenshin пишет:
1. написать Класс синглетон для подключения к базе данных используя mysqli или PDO...
Браво, я вам только что это сделал, только это не класс, а функция, но разницы абсолютно никакой.
Kenshin пишет:
и другой класс, где уже обрабатывались данные с БД.
Ну вот и займитесь этим. Как обрабатывать данные с бд я тоже писал в предыдущем посте.
Kenshin пишет:
Мой учитель
Вот оно что))) Я верен что вы его удивите функцией синглтона
Kenshin пишет:
но я должен подумать о prepared statement для минимизации SQL-инъекций...
Опять же, всё есть в моём предыдущем посте.
Kenshin пишет:
По задаче Класс синглетон должен остаться...
Вот я и не могу понять... или я совсем дурак и не понимаю.... или это мой учитель дурак и мне дурацкое задание дает....
Синглтон это паттерн (шаблон), а вот реализация уже идёт в классе. Но я вам могу сказать что конкретно для класса работы с бд(mysqli, PDO) реализация в классе бессмысленна, лучше делать как я показал используя функцию. Если ваш учитель захочет именно реализацию с классом, попросите его обосновать чем класс лучше моей функции.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.