| 
							luckyjew
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 24-04-2010 17:08 »   | 
								
								 | 
							  
							 
							Добрый день!
  Хочу спросить совета у знающих людей. На локальной машине установил Apache, PHP, MySQL. Вроде все работает (в частности, запросы к базе данных, такие как SELECT, UPDATE, а вот INSERT почему-то не выполняется, хотя тот же самый скрипт отлично работает в vertrigo.
  Заранее спасибо! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									«  Ответ #1 : 24-04-2010 19:22 »    | 
								
								 | 
							  
							 
							luckyjew, чем проверял? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							luckyjew
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 25-04-2010 09:15 »   | 
								
								 | 
							  
							 
							RXL что значит, чем проверял? Браузером, наверное. К примеру, строка запроса: $sql = "INSERT INTO `tbl_name` (`name`) VALUES ('value')"; $res = mysql_query ($sql, $connect) or die($sql); //переменная $connect отвечает за подключение к базе данных
 В ответ на выполнение браузер выводит значение переменной $sql, то есть запрос не выполняется. Хотя, $sql = "UPDATE `tbl_name` SET `name`='value'"; $res = mysql_query($sql, $connect) or die($sql);
  выполняется, и никаких ошибок и сообщений в браузер не выводятся.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 25-04-2010 11:37 »   | 
								
								 | 
							  
							 
							luckyjew, проверь права на таблицу для данного пользователя.
  И еще, при выполнении 'insert' ты должен передать все значения для столбцов таблицы. Т.е. если в таблице 5 столбцов, то при insert ты должен передать значения для всех пяти столбцов. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-04-2010 11:40 от Serg79 »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							luckyjew
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 25-04-2010 12:03 »   | 
								
								 | 
							  
							 
							Serg79, как показывает практика, не обязательно указывать все поля таблицы. А по поводу прав - пользователь-то root и в mysql ему выставлены all privileges. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 25-04-2010 12:12 »   | 
								
								 | 
							  
							 
							Т.е. если в таблице 5 столбцов, то при insert ты должен передать значения для всех пяти столбцов.
  Не обязательно, если не передать все - остальные получат значение NULL (или по умолчанию, если это настроено в параметрах таблицы). А вот если значение NULL запрещено хотя бы для одного из полей - тогда действительно запись не добавится и возникнет ошибка. luckyjew, Ты включил вывод всех ошибок в php? В начале скрипта: error_reporting(E_ALL | E_STRICT);  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 25-04-2010 12:17 »   | 
								
								 | 
							  
							 
							Kivals да не обязательно если поле может принимать значение 'null'. Но в этом случае все поля которые могут принимать значение 'null' должны быть сгруппированы в конце таблицы или в 'insert' передавать список изменяемых значений отличных от 'null'. Иначе таким полям все равно надо присваивать значение хоть это значение и будет 'null'.
  ИМХО, лучше все равно придерживаться правил указывания значений для каждого столбца при выполнении запроса 'insert'. Такой код будет как минимум самодокументирован, что в последующем сопровождении позволит намного быстрее вспомнить поля таблицы.
  Можно посмотреть какую ошибку возвращает MySQL с помощью функции 'mysql_error'. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-04-2010 12:28 от Serg79 »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 25-04-2010 12:29 »   | 
								
								 | 
							  
							 
							ИМХО: добавлять записи вообще нужно с использованием хранимых процедур, а не insert (insert выполняется уже внутри процедуры, после проверки значений и выдачи понятного сообщения об ошибке, если что не так в параметрах). По крайней мере я свои системы стараюсь строить именно так, т.е. БД - это все-таки база данных (со всеми вытекающими связями между данными и проверкой корректности), а не просто хранилище данных. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 25-04-2010 12:31 »   | 
								
								 | 
							  
							 
							Kivals, все зависит от бизнес логики. Где то нужно и 50 раз помолиться прежде чем сказать аминь. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 25-04-2010 12:39 »   | 
								
								 | 
							  
							 
							Offtopic: Serg79, я немного зарапортовался   В принципе в самом insert ничего страшного нет и кстати если использовать триггеры то можно в них тоже спокойно проверять значения (т.е. описанный мною метод можно реализовать с помощью insert и триггеров - так вроде даже правильней получится). Ну а насчет бизнес-логики - не согласен. Приведи пример, где чистый insert предпочтительней (кроме случаев повышения производительности, но это уже технические требования, а не бизнес-логика)   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serg79
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 25-04-2010 12:52 »   | 
								
								 | 
							  
							 
							Да не знаю Kivals, есть куча приложений которые используют базу для хранения 'key => value' значений. Такие приложения вполне обходятся базовым API SQL без триггеров и функций. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 25-04-2010 13:24 »   | 
								
								 | 
							  
							 
							Offtopic: Serg79, ну насколько я встречал в практике - для этого достаточно одной таблицы с двумя полями. А остальные таблицы? И мне кстати удобней было бы использовать функции SetValue()/GetValue(), при этом еще и проверяя, а есть ли значение по указанному ключу. Тут вопрос в том, что переносимость хранимых процедур (функций) между разными БД очень плохая: у каждой БД свой язык (а то и несколько), нет стандартов, которые присутсвуют для SQL. Так что если приложение планируется с поддержкой разных БД - то для всех этих БД нужно будет написать все хранимые процедуры с нуля, а это немало работы...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							luckyjew
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 25-04-2010 13:27 »   | 
								
								 | 
							  
							 
							Да, проблема оказалась не в настройках PHP или MYSQL, как я думал, а, как заметил Kivals, в том, что у меня часть полей в таблице были NOT NULL и поэтому их надо было указывать в запросе. А еще, некоторые поля у меня были типа int, а я в запросе передавал им значения типа char.  Как только я все это исправил - скрипт заработал.
  Всем спасибо за помощь! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 25-04-2010 17:44 »   | 
								
								 | 
							  
							 
							RXL что значит, чем проверял?
  Браузером, наверное.
  Постарайся больше у нас такого не говорить. Ок? Чай мы не саппорт.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	 |