Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужен совет по созданию класса для работы с базой

54K
08 мая 2010 года
cyberx
15 / / 06.05.2010
Код:
class DB
{
function connect()
{
$db = new mysqli("localhost", "user", "pass", "bd");
$db->query("SET CHARSET SET utf8");
$db->query("SET NAMES 'utf8'");
$this->query = $db;
return $db;
}



function select($select)
{
if ($result = $this->query->query($select))
{
 if($result->num_rows > 0)
 {
  $row = $result->fetch_assoc();
  return $row;
 }
 else
 {
  return FALSE;
 }
}
else
 {
  return FALSE;
 }
$result->close();
}

 

}

$DB = new DB();
$DB->connect();


$select = $DB->select("SELECT `name` FROM `users` WHERE `id`='1'");
echo  $select['name'];


Все работает, но опасаюсь что в функция select могу передать все что угодно, даже если фильтровать могут передать не то что мне нужно. Если сделать так то тут явно указываю что вывести

Код:
$db = new mysqli("localhost", "user", "pass", "bd");
$db->query("SET CHARSET SET utf8");
$db->query("SET NAMES 'utf8'");



if ($result = $db->query("SELECT `name` FROM `users` WHERE `id`='1'"))
{
 if($result->num_rows > 0)
 {
  $row = $result->fetch_assoc();
  echo $row['name'];
 }
 else
 {
  die;
 }
}
else
 {
  die;
 }
$result->close();


Какой метод безопасней и все таки лучше использовать?
244
08 мая 2010 года
UAS
2.0K / / 19.07.2006
Я так и не понял, что вы хотите. Класс должен лишь выполнять запрос, можно ещё прикрутить экранирование символов. Не более.

У вас как-то все убого. Посмотрите готовые решения, какая у них архитектура и прочее, а потом выберите, что вам важнее и пишите аналоги.
54K
08 мая 2010 года
cyberx
15 / / 06.05.2010
А где можно найти готовые решения? Потом я мог бы их подстроить под себя. Нет фильтрация и проверка это все понятно,я только про метод спрашивал. А вообще что не то в этом классе?
244
08 мая 2010 года
UAS
2.0K / / 19.07.2006
В моем понимании - нормальный класс - это абстракция над используемой БД, один общий интерфейс работы с полученными результатами, профилирование запросов (хотя бы на уровне хранения информации о том, сколько каждый выполняется).

Если работали с Java, то там как раз средство работы с БД очень хорошо орагнизовано.

Есть один интерфейс, который описывает класс, абстрактный класс, который реализует общий функционал (профилирование и т.д.) и также набор классов, расширяющих его - для MySQL, для постгреса и т.д.
Таким же образом устроен набор классов для работы с полученным результатами)
54K
08 мая 2010 года
cyberx
15 / / 06.05.2010
Ну подсчитывать количество запросов можно же сделать с помощью сессий? На этом сайте видел пример с заданными параметрами, но его не смог подстроить под один класс
Цитата:

$mysqli = new mysqli("localhost", "user", "password", "world");


if ($stmt = $mysqli->prepare("SELECT Code, Name FROM Country WHERE Code LIKE ? LIMIT 5")) {

$stmt->bind_param("s", $code);
$code = "C%";

$stmt->execute();

$stmt->bind_result($col1, $col2);

while ($stmt->fetch()) {
printf("%s %s\n", $col1, $col2);
}

$stmt->close();
}

$mysqli->close();



Тут как знаю prepare кэширует и защищает от частых запросов

244
09 мая 2010 года
UAS
2.0K / / 19.07.2006
Цитата: cyberx
Ну подсчитывать количество запросов можно же сделать с помощью сессий?

Учет запросов - имеется в виду для конкретно вызываемой страницы (т.е. только в рамках одной генерации страницы/отработки какого-либо задания), а не в общем.

Посчет кода. Вы определитесь, что вы хотите. Обертку написать или mysqli научиться юзать. По крайней мере в том коде и так все видно на 6 и 8 строчках. Для начала местами поменяйте + C% - некорректно указкано, должно выдать ошибку запроса (ибо где кавычки для строки??).
Посчет ввода данных в запрос - откройте для себя могучую функцию sprintf.

54K
09 мая 2010 года
cyberx
15 / / 06.05.2010
Да я его просто скопировал, просто не знаю как его подстроить под единый класс. Мне для начала не обязательно делать профессиональный класс, пока хочу сделать средненький. А вообще как я знаю sprintf больше ресурсов требует чем echo
244
09 мая 2010 года
UAS
2.0K / / 19.07.2006
Я лично лучше воспользуюсь sprintf, чем нагромождать код множественными конкатенациями (это я про случай echo говорю).

По теме - я вам уже ответил. Пишите интерфейс, какой вам нужен, под него пишите класс.
13
09 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Готовое решение можно посмотреть например тут:
http://adodb.sourceforge.net/
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог