это нормально, если я положу все мои запросы БД в один файл? - PullRequest
2 голосов
/ 11 октября 2010

У меня есть файл функций с именем models.php, в котором хранятся все функции моей базы данных, например

// get the updates for the $user_id profile
function getProfileUpdates($user_id) {

    $query="SELECT m . * , u.picture, u.username
            FROM notes m, user u
            WHERE m.user_id = u.user_id
            AND u.user_id ='$user_id'
            ORDER BY m.dt DESC
            LIMIT 10";
    $result = mysql_query($query);
    return $result;



}
function getTopicId($topic){


              $query="SELECT id
                     FROM topic
                     WHERE topic ='$topic'
                      ";

              $result = mysql_query($query);

              $row = mysql_fetch_array($result);

              return $row['id'];
          }

Можно ли хранить все мои запросы mysql в одном файле, чтобы я мог использовать любой из них в любое время, когда захочу при разработке своего веб-приложения, это хорошая практика или их лучшая альтернатива.

p.s. Моя главная забота - функциональность и производительность, читаемость кода сейчас не проблема!

Ответы [ 3 ]

1 голос
/ 11 октября 2010

Да, отделить весь код интерфейса базы данных. Это рекомендуемая практика. Это помогает многократному использованию, удобочитаемости, а также отделяет логику вашего приложения от обработки хранилища данных. Кроме того, при этом обычно не снижается производительность.

Теоретическое преимущество заключается в том, что вы можете перейти на другую методологию базы данных, если все ваши функциональные возможности будут удалены. На практике сложно перейти от бэкэнда SQL, но, по крайней мере, ваш API позволит это сделать.

Два замечания: вы никогда не сможете удалить всех запросов к базе данных. Часто существуют ограничения производительности или параметров, в которых имеет смысл сохранять смешанные запросы SQL в коде вашего приложения. Но постарайся выйти так, как ты считаешь разумным.

Второе: попробуйте удалить mysql_query. Это не только проще, но и более безопасно использовать PDO (который также существует в эмуляции PHP4). Например, ваша первая функция может быть упрощена до:

function getProfileUpdates($user_id) {
    global $db;
    $s = $db->prepare("SELECT m . * , u.picture, u.username
        FROM notes m, user u
        WHERE m.user_id = u.user_id
        AND u.user_id = ?
        ORDER BY m.dt DESC LIMIT 10");
    $s->execute($user_id)
    return $s->fetch();
}

Где $user_id был добавлен в качестве параметра, а в SQL заменен ? заполнителем.

0 голосов
/ 11 октября 2010

Слово «все» беспокоит меня.Можно ли использовать такие функции, как getProfileUpdates, которые можно вызывать из приложения, чтобы получить список всех обновлений профиля? Абсолютно!

Хотите ли вы абсолютного правила, что 100% всех ваших операторов SQL всегда должны записываться как функции в этом файле? Абсолютно нет!

Хотя некоторые запросы (например, выборка идентификатора темы) являются общими и могут использоваться повторно и, вероятно, понадобятся во многих местах приложения, другие запросы будут специализированы длязадача, которую выполняет конкретный скрипт.Не добавляйте путаницы, преднамеренно перемещая их в функции в вашей библиотеке «все операторы SQL».

0 голосов
/ 11 октября 2010

Я предпочитаю объектно-ориентированное программирование для такого рода вещей, например $user->getProfileUpdates(), но кажется приемлемым решением для повторного использования кода.

Остерегайтесь части, где вы должны начать указывать большие массивы опций. Что если вы в конечном итоге решите, что вам может потребоваться другой порядок или ограничение на обновления профиля, в зависимости от контекста? Ожидайте расширить то, что у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...