 
			
				22.02.2010, 16:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.12.2009 
					
					
					
						Сообщений: 742
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Прозрачная работа с несколькими базами данных на PHP
			 
			
		
		
		
		Тема следующая. Приходилось ли работать с несколькими базами данных на одном сервере ? Если кому и приходилось расскажите какие были проблемы ?  
Зачем: Надоели стандартные методы работы с базой. Думаю создать модуль, который будет прозрачен для разработчика, за счет которого можно работать с любой базой данных любого типа в любой момент, указав всего лишь тип (mysql,mssql и т.п.) и название базы данных (его указываешь в настройках баз), а на выходе получить обьект с (договоренными/обще принятыми) методами типа ->query, ->next и т.п. Вся инфа по тому как сделать запрос, генерация ошибок, колво строк и т.п. выполняет сам полученный обьект... 
		
	
		
		
		
		
		
			
				__________________ 
				Настоящий программист  думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c) 
Относись к человеку  так же, как хотелось бы отношения к себе (с) 
Все нужно там,  где оно нужно, а все не нужно нигде (с)  Gozar
B~Vladi: А кто такой JavaScript стрелок?!  micscr: это тот, кто не jQuery танкист. 
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с)  Никлаус Вирт 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				22.02.2010, 18:55
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.02.2008 
					
					
					
						Сообщений: 9,177
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				22.02.2010, 19:04
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.06.2009 
					
					
					
						Сообщений: 1,703
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		http://framework.zend.com/manual/ru/zend.db.html
Советую почитать перед началом - можно подчерпнуть много полезных идей. Сам ни чего такого ещё не делал, но планирую. Вообще идея хорошая ибо для добавления поддержки очередного СУБД нужно править только один класс, да и объекты как-то симпатичнее кучи переменных в глобальном пространстве.  
		
	
		
		
		
		
		
			
				__________________ 
				Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже. 
 Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				22.02.2010, 20:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.12.2009 
					
					
					
						Сообщений: 742
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Tim
			
		
	 | 
 
	| 
		СУБД нужно править только один класс
	 | 
 
	
 
 в моем случае ничего даже править не надо. в setup файле надо будет указать тип базы необходимые интсал запросы и идентификатор в модуле. 
А в самом модуле будет так:
 
$db = F_SQL::dbo('Название модуля','идентификатор базы')
$db->q("SELECT * FROM {$db->__}название таблицы");
echo $db->count; //количество полученных строк запроса
while ($r = $db->next()){
  ...
  }
...
где $db->__ - префикс для работы с таблицами модуля. 
тем самым модуль прозрачен к сайту полность. все настраивается админом, какой главнй префикс. к какой базе привязан модуль и т.п.  
		
	
		
		
		
		
		
			
				__________________ 
				Настоящий программист  думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c) 
Относись к человеку  так же, как хотелось бы отношения к себе (с) 
Все нужно там,  где оно нужно, а все не нужно нигде (с)  Gozar
B~Vladi: А кто такой JavaScript стрелок?!  micscr: это тот, кто не jQuery танкист. 
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с)  Никлаус Вирт 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось PeaceCoder, 22.02.2010 в 20:15.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				22.02.2010, 20:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.04.2009 
					
					
					
						Сообщений: 1,263
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		$db->q("SELECT * FROM {$db->__}название таблицы");
	 | 
 
	
 
 Вот и первый плохой подход. 
При подобном проектировании, конечная цель -- вообще избавиться от sql везде, кроме как непосредственно в классах, реализующих каждый database engine. Правильно как-то так:
 
	
 
	| 
		 Код: 
	 | 
 
	$db->get_object_list($type, $tbl_name, $fields, $filter, $offset, $count);  | 
 
	
 
 
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.02.2010, 01:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.12.2009 
					
					
					
						Сообщений: 742
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от e1f
			
		
	 | 
 
	| 
		Правильно как-то так:
	 | 
 
	
 
 и как этим методом ты предлагаешь гибкость выборки ?  Твой метод как раз плох. Ты пытаешься исключить вообще запросы, прибегая к жесточайшим методам. Это не то, на что я нацелен. 
В моем случае не играет роли на каком языке написан запрос. При создании обьекта $db в нем уже будут готовые функции для работы с тем или инным типом базы данных. В твоем же случае я не представляю как это сделать. Ведь синтаксис разных баз разный... и преобразовывать один в другой просто как минимум лишняя трата времени, а во вторых не файл что преобразование будет правильным.  
		
	
		
		
		
		
		
			
				__________________ 
				Настоящий программист  думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c) 
Относись к человеку  так же, как хотелось бы отношения к себе (с) 
Все нужно там,  где оно нужно, а все не нужно нигде (с)  Gozar
B~Vladi: А кто такой JavaScript стрелок?!  micscr: это тот, кто не jQuery танкист. 
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с)  Никлаус Вирт 
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.02.2010, 10:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.04.2009 
					
					
					
						Сообщений: 1,263
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от PeaceCoder
			 
		
	 | 
 
	| 
		В моем случае не играет роли на каком языке написан запрос.
	 | 
 
	
 
 Мда? То есть в коде проекта будет sql-строка. А если некоторый формат базы не поддерживает синтаксис, используемый в ней? А если мы  решили вообще отказаться от sql?    Если делать грамотный Storage-wrapper, то от запросов везде, кроме как в классах, реализующих функционал для каждого типа БД, надо бежать как от огня. 
В этом случае да, мы просто в конфиге меняем класс, который будет использоватся, и кушам печенье. Иначе мы бегаем, высунув язык, по коду, и меняем ручками запросы, которые ВНЕЗАПНО перестали работать на другой БД.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.02.2010, 10:38
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.06.2009 
					
					
					
						Сообщений: 1,703
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		e1f,
   
PeaceCoder, 
Zend и ещё раз Zend. Семое главное это архитектура (идея как всё должно работать). Реализовать сможет любой, у кого есть более или менее прямые руки. Если сейчас архитектуру не додумать то потом уже не исправить, только переделывать.  
		
	
		
		
		
		
		
			
				__________________ 
				Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже. 
 Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.02.2010, 11:09
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.12.2009 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Сдается мне что уже есть такое - тот же самый PEAR DB packages (с Zendом не работал). 
Или не прав ? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.02.2010, 14:04
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.06.2009 
					
					
					
						Сообщений: 1,703
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 sergdev, 
всё верно, такого много, но это всё ЧУЖОЙ КОД. 
		
	
		
		
		
		
		
			
				__________________ 
				Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже. 
 Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |