Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Настройка MySQL и PHP  (Прочитано 7127 раз)
0 Пользователей и 1 Гость смотрят эту тему.
luckyjew
Гость
« : 24-04-2010 17:08 » 

Добрый день!

Хочу спросить совета у знающих людей.
На локальной машине установил Apache, PHP, MySQL. Вроде все работает (в частности, запросы к базе данных, такие как SELECT, UPDATE, а вот INSERT почему-то не выполняется, хотя тот же самый скрипт отлично работает в vertrigo.

Заранее спасибо!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-04-2010 19:22 » 

luckyjew, чем проверял?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
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
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 25-04-2010 12:12 » 

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

luckyjew, Ты включил вывод всех ошибок в php? В начале скрипта:
Код:
error_reporting(E_ALL | E_STRICT);

Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 25-04-2010 12:17 » 

Kivals да не обязательно если поле может принимать значение 'null'. Но в этом случае все поля которые могут принимать значение 'null' должны быть сгруппированы в конце таблицы или в 'insert' передавать список изменяемых значений отличных от 'null'. Иначе таким полям все равно надо присваивать значение хоть это значение и будет 'null'.

ИМХО, лучше все равно придерживаться правил указывания значений для каждого столбца при выполнении запроса 'insert'. Такой код будет как минимум самодокументирован, что в последующем сопровождении позволит намного быстрее вспомнить поля таблицы.

Можно посмотреть какую ошибку возвращает MySQL с помощью функции 'mysql_error'.
« Последнее редактирование: 25-04-2010 12:28 от Serg79 » Записан
Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 25-04-2010 12:29 » 

ИМХО: добавлять записи вообще нужно с использованием хранимых процедур, а не insert (insert выполняется уже внутри процедуры, после проверки значений и выдачи понятного сообщения об ошибке, если что не так в параметрах). По крайней мере я свои системы стараюсь строить именно так, т.е. БД - это все-таки база данных (со всеми вытекающими связями между данными и проверкой корректности), а не просто хранилище данных.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 25-04-2010 12:31 » 

Kivals, все зависит от бизнес логики. Где то нужно и 50 раз помолиться прежде чем сказать аминь.
Записан
Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 25-04-2010 12:39 » 

Offtopic:
Serg79, я немного зарапортовался Улыбаюсь
В принципе в самом insert ничего страшного нет и кстати если использовать триггеры то можно в них тоже спокойно проверять значения (т.е. описанный мною метод можно реализовать с помощью insert и триггеров - так вроде даже правильней получится).
Ну а насчет бизнес-логики - не согласен. Приведи пример, где чистый insert предпочтительней (кроме случаев повышения производительности, но это уже технические требования, а не бизнес-логика)
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 25-04-2010 12:52 » 

Да не знаю Kivals, есть куча приложений которые используют базу для хранения 'key => value' значений. Такие приложения вполне обходятся базовым API SQL без триггеров и функций.
Записан
Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 25-04-2010 17:44 » new

RXL что значит, чем проверял?

Браузером, наверное.

Постарайся больше у нас такого не говорить. Ок? Чай мы не саппорт.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines