Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с Insert и Update

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: помогите розобратьса
guardlight
Отправлено: 08 Января, 2011 - 14:38:11
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




проблема такая есть база в которую заноситса инфа...
не могу сделать так чтобы если строка уже сущесвует она обновилась если такого айди еще нет добавилась?!
юзаю такой код
PHP:
скопировать код в буфер обмена
  1. $general = file ("httpdoc/Stok.txt");
  2. for ( $i = 0; $i < count ($general); $i++ ){
  3.      list ($one,$too,$tree) = explode ("|", $general[$i]);
  4. $ $resulto = mysql_query ("INSERT INTO stok (id_hard_stok,number,date) VALUES ('$one','$too','$tree') ON DUPLICATE KEY UPDATE id_hard=id_hard+1");
  5. }

пытаюсь через дубликать кей но при последуюшем обновлении он давбавляет еще одну базу а не обновляет её
подскажите туда ли лезу?!

(Отредактировано автором: 08 Января, 2011 - 14:56:56)

 
 Top
Champion Супермодератор
Отправлено: 08 Января, 2011 - 15:00:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Зачем в ON DUPLICATE KEY UPDATE обновлять ключевое поле??
Видимо, оно и обновляется. А потом вставляется запись на освободившееся место.
 
 Top
guardlight
Отправлено: 08 Января, 2011 - 15:04:07
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




а мне необходимо чтобы всю базу все поля обновил а новые добавил?!!через ON DUPLICATE KEY UPDATE не выйдет?
(Добавление)
есть идейка сделать через
если роукант в UPDATE = 0 то INSERT
 
 Top
Champion Супермодератор
Отправлено: 08 Января, 2011 - 15:40:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Выйдет, только обновлять, наверное, надо не значение ключа, а остальные поля. Ты так не считаешь?
 
 Top
guardlight
Отправлено: 08 Января, 2011 - 15:57:04
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




приведи пример плис моего кода
так чтоли
PHP:
скопировать код в буфер обмена
  1.  $resulto = mysql_query ("INSERT INTO stok (id_hard_stok,number,date) VALUES ('$one','$too','$tree') ON DUPLICATE KEY UPDATE  stok SET
  2. id_hard_stok='$one',
  3. buy='$too',
  4. sell='$tree'");
 
 Top
HotBird
Отправлено: 08 Января, 2011 - 21:56:33
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Сент. 2010  


Помог: 2 раз(а)




guardlight пишет:
так чтоли

Просто строку 2 уберите.


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
JustUserR
Отправлено: 09 Января, 2011 - 02:49:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




guardlight В качестве возможной программной реализации для предполагаемой задачи осуществления поиска существующей записи в таблице БД и проведения ее модификации или добавления при условии предварительного отсутсвия - допустимо использования определяемой пользовательской SQL-процедуры формата PL/SQL осуществляющей поиск вхождения требуемого элемента и выбор дальнейших действий в классическом условном операторе


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
guardlight
Отправлено: 09 Января, 2011 - 15:36:26
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




HotBird пишет:
Просто строку 2 уберите.
id_hard_stok это не ключ а айди товара и указана его цена в сел и бай а по поводу PL/SQL
IF - THEN - ELSE - END IF;следует применять??
 
 Top
HotBird
Отправлено: 09 Января, 2011 - 19:24:46
Post Id



Гость


Покинул форум
Сообщений всего: 114
Дата рег-ции: Сент. 2010  


Помог: 2 раз(а)




guardlight пишет:
id_hard_stok это не ключ а айди товара и указана его цена в сел и бай

А у вас уникальное поле айди имеет автоинкремент?
Если нет то тогда оно должно быть указано здесь: INSERT INTO stok (id,id_hard_stok,number,date) с присвоением уникального значения.


-----
Человек, сделавший синтаксический анализатор PHP на одном регулярном выражении, займет достойное место среди гениев.
Качественный хостинг по доступной цене
 
 Top
Champion Супермодератор
Отправлено: 09 Января, 2011 - 19:56:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




guardlight пишет:
по поводу PL/SQL
IF - THEN - ELSE - END IF;следует применять??
Да. Но тут это не нужно. Тут простая задача, которая решается предложением on duplicate key update.
guardlight пишет:
так чтоли...
ON DUPLICATE KEY UPDATE stok SET
id_hard_stok='$one',
Красную штуку не надо. А так похоже на правду. Но мы так и не узнали, где у таблицы ключ, а где то, что надо обновлять, поэтому я могу только догадаться.
 
 Top
JustUserR
Отправлено: 09 Января, 2011 - 20:33:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




guardlight пишет:
А по поводу PL/SQL IF - THEN - ELSE - END IF;следует применять??
Использование технологии PL/SQL позволяет осущесвить создане унифицированных приложений по работе с хранищимися информационными полями на оригинальной стороне сервера БД - более подробная информация по предполагаемой задаче предоставлена здесь http://www[dot]firststeps[dot]ru/sql/oracle/r.php?43


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 09 Января, 2011 - 20:36:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




JustUserR, написание на Ассемблере функции сложения 2 чисел тоже дает возможность заняться ерундой. Более подробная информация предоставлена тоже где-то.
Зачем городить процедуры, когда задача делается одним оператором SQL?
 
 Top
nextdrift
Отправлено: 09 Января, 2011 - 21:20:01
Post Id


Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Зашёл на форум по той-же проблеме..........
Решил не создавать тему. Кину сюда
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "
  3.  UPDATE
  4.    `desing`
  5.  SET
  6.    `b_href`   = '{$b_href}' ,
  7.    `b_text`   = '{$b_text}' ,
  8.    `bg_color` = '{$bg_color}' ,
  9.    `bg_img`   = '{$bg_img}' ,
  10.    `b_rep`    = '{$b_rep}'
  11.  WHERE
  12.    `user_id`  = '{$user_id}'
  13. ";
  14. if (mysql_query($query) == false)
  15.   {
  16.     $query = "
  17.      INSERT INTO
  18.        `desing`
  19.      SET
  20.        `b_href`   = '{$b_href}' ,
  21.        `b_text`   = '{$b_text}' ,
  22.        `bg_color` = '{$bg_color}' ,
  23.        `bg_img`   = '{$bg_img}' ,
  24.        `b_rep`    = '{$b_rep}' ,
  25.        `user_id`  = '{$user_id}'
  26.    ";
  27.     if (mysql_query($query) == false)
  28.       {
  29.         $pI['status'] = "<div class='status_error'>Упс... Ошибка сохранения</div>";
  30.       }
  31.   }
  32. else
  33.   {
  34.     $pI['status'] = "<div class='status_good'>Сохранено успешно</div>";
  35.   }
  36.  
  37.  


Я получаю статус что всё сохранено, но в таблице пусто.....
Подскажите где я делаю ошибку...

Поле user_id - PRIMARY
(Добавление)
Вроде сделал...

Поменял
с схемы UPDATE -> INSERT, на INSERT -> UPDATE

(Отредактировано автором: 09 Января, 2011 - 21:20:50)

 
 Top
Champion Супермодератор
Отправлено: 10 Января, 2011 - 08:34:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Потому что запрос update успешно выполняется. Но не затрагивает ни одной строки.
Чтоб проверить сколько строк затронул апдейт, есть mysql_affected_rows. А лучше воспользоваться той конструкцией, которую мы тут так бурно обсуждаем.
 
 Top
JustUserR
Отправлено: 10 Января, 2011 - 20:23:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Champion пишет:
Зачем городить процедуры, когда задача делается одним оператором SQL?
Возможной полезной стороной использования SQL-процедур для осуществления решения поставленной задачи является допустимость непосредственного программного ображения к хранимым информационным полям


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB