2010-10-08 5 views
1

Я просто изучаю PHP, и я пытаюсь выяснить, как я могу хранить свои запросы к базе данных в отдельном файле либо как часть класса, так и просто как простые переменные.PHP хранит запросы db во включенном файле как?

Например: У меня есть запрос, который выглядит следующим образом:

$checkuser = mysql_query("SELECT UserName, Email FROM users 
          WHERE UserName = '$username4db' OR EMAIL = '$email4db'") 
      or die($checkuser_error); 

Вместо того, чтобы писать его встроенный в файл, я хотел бы, чтобы переместить это центральное место, а затем использовать их оттуда.

Я пробовал использовать файл include и просто называть переменную на месте, но она не работает.

+0

Что вы собираетесь делать с этой переменной? И разве вам не сказали, что «это не работает» - худший способ задать вопросы? –

ответ

1

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

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

Представления предназначены для отображения кода. Как правило, при написании представлений в представлении должен идти только HTML и базовый PHP (эховые переменные, цикл foreach для построения таблицы).

Контроллер находится там, где находится программная логика. С контроллера вы вызываете модели для обработки данных, необходимых для создания данных, которые затем передаются в представление.

Это очень простое объяснение, и всегда в wikipedia есть что сказать по теме: http://en.wikipedia.org/wiki/Model-view-controller.

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

+0

Спасибо! Это хороший совет. Я играл с asp.net MVC, но не знал, насколько подобным он будет в PHP. PHP прошел очень длинный путь, и до сих пор я люблю его гораздо больше, чем .NET. – 2010-10-10 22:46:23

1

Сохранение запросов в центральном месте вряд ли имеет смысл в ИМО, поскольку они всегда будут частью логики программы, и вам нужно будет увидеть их (и изменить) при работе над потоком программы.

Вы можете поместить что-то вместе с запросами, содержащими заполнители, которые затем заполняются с помощью sprintf(), но я не вижу смысла.

+0

Действительно? Вы не видите, что нужно хранить код доступа к данным отдельно? В течение многих лет мне говорили, что это плохая идея, потому что обслуживание становится кошмаром. Однако я понимаю, что PHP - это совсем другой мир. Я все еще изучаю методологии, стоящие за ним. Мне любопытно, но какое еще предложение я получу. Спасибо за предложение! – 2010-10-08 20:51:29

+0

Код доступа кодов данных @Scott - это одно, а программная логика - другая. –

+0

@Col, Точно, так в чем ваш смысл? – 2010-10-10 22:55:34

0

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

+0

Да, спасибо! Именно это я и сделал. – 2010-10-10 22:54:22

0

Я нахожу парадигму «один файл запроса» очень интересной. Я думаю, что имеет смысл просто хранить запросы, в которых вы хотите получить данные, потому что именно там вы его найдете. Вместо этого, другие вещи, это хорошая идея, чтобы поместить все запросы в центральное место, на которое вы всегда можете ссылаться, даже когда оно достигает 5000 строк. Я не могу сказать, что есть правильный ответ.

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

+0

Жаль, что я не был достаточно конкретным. По центральному файлу я имел в виду центральный файл для каждого каталога. Например, все элементы управления, связанные с безопасностью, такие как вход в систему, регистрация, активация учетной записи и т. Д., Содержатся в их собственном каталоге. Количество кодов доступа к данным на функциональность меньше, чем hasndful, но очень легко найти и отредактировать их по мере необходимости. – 2010-10-10 22:50:13

+0

Я создал класс с методами для каждого запроса. Мне пришлось перемещать всю логику, и она отлично работает. Спасибо за совет! – 2010-10-10 22:53:26

0

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

function checkuser($username4db, $email4db) { 
    $sql = "SELECT UserName, Email FROM users WHERE UserName = %s OR EMAIL = %s"; 
    return db::getrow($sql, $username4db, $email4db); 
} 
  • в этом случае запрос будет работать только тогда, когда функция CheckUser() вызывается.

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

+0

Извините, но все запросы не выполняются безоговорочно. Вы читали мой пост? Я написал класс, функцию, переменную. Даже если положить его в константу, он будет запускаться только при вызове. – 2010-10-10 22:43:59