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 :: Обновление строк в таблице БД

 PHP.SU

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


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

> Без описания
shonny
Отправлено: 06 Ноября, 2016 - 15:38:28
Post Id


Новичок


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


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




Здравствуйте, у меня проблема такая. Есть таблица, куда я добавляю данные через файл insert-ом 1 раз, далее нужно просто обновлять строки, где поменялись значения. Структура таблицы ниже, надо обновить поля ip, ping, hostname, ports, mac. Я знаю как обновить одну строку, но как реализовать это для всех строк?
Прикреплено изображение (Нажмите для увеличения)
2016-11-06_15-49-01.png
 
 Top
3d_killer
Отправлено: 06 Ноября, 2016 - 16:01:39
Post Id



Участник


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


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




циклом
(Добавление)
или в запросе использовать IN или пересмотреть условие WHERE
 
My status
 Top
shonny
Отправлено: 06 Ноября, 2016 - 16:22:27
Post Id


Новичок


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


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




3d_killer пишет:
циклом
(Добавление)
или в запросе использовать IN или пересмотреть условие WHERE

Вот функция вставки, а через update можно как-то реализовать для всех строк?
PHP:
скопировать код в буфер обмена
  1.         mysql_select_db("infoip") or die(mysql_error());
  2.        
  3.             $q= mysql_query ("SELECT * FROM `ip2`");
  4.                     if (mysql_num_rows($q) == 0){
  5.                         $fp = fopen('ip2.csv', 'r+'); // чтение и запись
  6.                             while(!feof($fp)) {
  7.                                 $buffer = fgets($fp, 4096);
  8.                                 list($IP,$Ping,$Hostname,$Ports,$Mac)=explode(",",$buffer);
  9.                                  $sql = "INSERT INTO ip2 (IP, Ping, Hostname, Ports, Mac, date) VALUES('".$IP."','".$Ping."','".$Hostname."','".$Ports."','".$Mac."', NOW())";
  10.                                  mysql_query($sql,$conn) or die(mysql_error());
  11.                                  echo fgets($fp) . "<br />";
  12.                          }
  13.                          fclose($fp);    
  14.                     }
 
 Top
3d_killer
Отправлено: 06 Ноября, 2016 - 17:27:45
Post Id



Участник


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


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




CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE FROM ip2 SET Ping=$Ping
 
My status
 Top
shonny
Отправлено: 08 Ноября, 2016 - 09:34:56
Post Id


Новичок


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


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




3d_killer пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE FROM ip2 SET Ping=$Ping

Данный запрос обновляет один столбец в таблице разве нет?
 
 Top
shonny
Отправлено: 08 Ноября, 2016 - 15:06:41
Post Id


Новичок


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


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




Попытался сделать также как в функции insert
PHP:
скопировать код в буфер обмена
  1.             $g= mysql_query ("SELECT * FROM `ip2`");
  2.                         $fd = fopen('ip2.csv', 'r+'); // чтение и запись
  3.                             while(!feof($fd)) {
  4.                                 $buffer = fgets($fd, 4096);
  5.                                 list($IP,$Ping,$Hostname,$Ports,$Mac)=explode(",",$buffer);
  6.                                  $sql_up = "UPDATE ip2 SET Ping = '$Ping', Hostname = '$Hostname', Ports = '$Ports', Mac = '$Mac' WHERE IP = '$IP'";
  7.  
  8.                                  mysql_query($sql_up) or die(mysql_error());
  9.                          }
  10.                          fclose($fd);

Выводит такие ошибки:
Notice: Undefined offset: 4 in F:\xampp\htdocs\PhpProject1\update.php on line 6

Notice: Undefined offset: 3 in F:\xampp\htdocs\PhpProject1\update.php on line 6

Notice: Undefined offset: 2 in F:\xampp\htdocs\PhpProject1\update.php on line 6

Notice: Undefined offset: 1 in F:\xampp\htdocs\PhpProject1\update.php on line 6
Как их исправить?
 
 Top
3d_killer
Отправлено: 08 Ноября, 2016 - 16:39:16
Post Id



Участник


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


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




shonny пишет:
UPDATE FROM ip2 SET Ping=$Ping

данный запрос обновляет всю таблицу
(Добавление)
shonny пишет:
UPDATE ip2 SET Ping
а если повнимательнее посмотреть на мой запрос, разве я так писал?
(Добавление)
если у вас данные разные и читаются от сюда ip2.csv, то обновлять надо не всю таблицу, а с каким либо условием
 
My status
 Top
LIME
Отправлено: 08 Ноября, 2016 - 16:53:10
Post Id


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


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


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




3d_killer надо вообще все переписать
Вообще все
Начиная от конфигов
Использовать объекты читатели/писатели
Иначе придется в каждое место копипастить
Но это все лирика
По сабжу
3d_killer пишет:
UPDATE FROM
ты походу теоретик и не пишешь код
Какой такой еще фром
Перепиши Улыбка
 
 Top
3d_killer
Отправлено: 08 Ноября, 2016 - 17:51:02
Post Id



Участник


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


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




LIME не я не теоретик, случайно видать, да действительно ошибся
CODE (SQL):
скопировать код в буфер обмена
  1. $STH = DB::DBH()->prepare("UPDATE ".PDB."catalog_property_to_directory SET position=:position WHERE directory_id=:directory_id AND property_id=:property_id");

(Добавление)
по поводу переписать да, идет такое обновление идет, тут раз ошибка и выкинуло нафиг с ошибкой, пол базы обновилось, половина нет

(Отредактировано автором: 08 Ноября, 2016 - 17:55:30)

 
My status
 Top
LIME
Отправлено: 08 Ноября, 2016 - 17:54:53
Post Id


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


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


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




3d_killer + что признал а не полез в бутылку
По твоему примеру
Тоже не лучший вариант
Совсем плохой если честно
Не используй имя схемы
Не все субд это разрешают
Даже в случае мускула например хостинг джино это не позволит
Лучше юзать абстракцию орм
Например доктрину
Тогда и перейти проще будет ... и много еще плюсов
Ну... если интересноУлыбка просто грабли пройдены былиУлыбка
 
 Top
3d_killer
Отправлено: 08 Ноября, 2016 - 17:56:47
Post Id



Участник


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


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




по поводу имя схемы поясни, ты имел в виду префикс? типо ".PDB."?
 
My status
 Top
LIME
Отправлено: 08 Ноября, 2016 - 18:01:11
Post Id


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


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


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




Да
Я подумал это имя схемы
Даже если нет это не отменяет совета выше
(Добавление)
А если да то плохо что в настройках приходится добавлять точку
 
 Top
3d_killer
Отправлено: 08 Ноября, 2016 - 18:02:54
Post Id



Участник


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


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




это просто префикс в подключении указан при инсталле
PHP:
скопировать код в буфер обмена
  1. define (PDB,"rs_");
  2. //define (Base,"PostgreSQL");
  3. define (Base,"MySQL");
 
My status
 Top
LIME
Отправлено: 08 Ноября, 2016 - 18:03:45
Post Id


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


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


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




И статический метод....фу
Другая форма зависимости от глобального окружения
Но это такая штука....можно долго это объяснятьУлыбка
(Добавление)
Ааа...ясн
 
 Top
3d_killer
Отправлено: 08 Ноября, 2016 - 18:07:18
Post Id



Участник


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


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




а зачем не статичный? мне экземпляры не нужны
PHP:
скопировать код в буфер обмена
  1.  
  2. defined("RS_ACCESS") or die("Нельзя получить прямой доступ к файлу!");
  3. //Префикс базы данных
  4. define (PDB,"rs_");
  5. //define (Base,"PostgreSQL");
  6. define (Base,"MySQL");
  7. class DB
  8. {
  9. private static $DBH=NULL;
  10. public static function DBH()
  11. {
  12. if (!self::$DBH)
  13. {
  14. try
  15.   {
  16.           if(Base=="PostgreSQL"){
  17.           //PostgreSQL
  18.           $host="192.168.1.51";
  19.           $db="any";
  20.           $user="root";
  21.           $pass="";
  22.           self::$DBH=new PDO(sprintf("pgsql:host=%s;port=5432;dbname=%s", $host, $db), $user, $pass);}
  23.           if(Base=="MySQL"){
  24.           //MySQL
  25.           $host="192.168.1.51";
  26.           $db="any";
  27.           $user="root";
  28.           $pass="";
  29.           //Попытка подключения
  30.           self::$DBH=new PDO(sprintf("mysql:host=%s;dbname=%s", $host, $db), $user, $pass);}
  31.           //Ошибки
  32.           //self::$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  33.           self::DBH()->exec("SET NAMES utf8");
  34.   }
  35. catch(PDOException $e)
  36.   {
  37.           echo " Извините. Но операци не может быть выполнена.";
  38.           die();
  39.           file_put_contents("PDOErrors.txt", $e->getMessage(), FILE_APPEND);
  40.   }
  41. }
  42. return self::$DBH;
  43. }
  44. }
  45.  

(Отредактировано автором: 08 Ноября, 2016 - 18:07:48)

 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB