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
Форумы портала PHP.SU :: Версия для печати :: Обновление строк в таблице БД
Форумы портала PHP.SU » » Вопросы новичков » Обновление строк в таблице БД

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

1. shonny - 06 Ноября, 2016 - 15:38:28 - перейти к сообщению
Здравствуйте, у меня проблема такая. Есть таблица, куда я добавляю данные через файл insert-ом 1 раз, далее нужно просто обновлять строки, где поменялись значения. Структура таблицы ниже, надо обновить поля ip, ping, hostname, ports, mac. Я знаю как обновить одну строку, но как реализовать это для всех строк?
2. 3d_killer - 06 Ноября, 2016 - 16:01:39 - перейти к сообщению
циклом
(Добавление)
или в запросе использовать IN или пересмотреть условие WHERE
3. shonny - 06 Ноября, 2016 - 16:22:27 - перейти к сообщению
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.                     }
4. 3d_killer - 06 Ноября, 2016 - 17:27:45 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE FROM ip2 SET Ping=$Ping
5. shonny - 08 Ноября, 2016 - 09:34:56 - перейти к сообщению
3d_killer пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE FROM ip2 SET Ping=$Ping

Данный запрос обновляет один столбец в таблице разве нет?
6. shonny - 08 Ноября, 2016 - 15:06:41 - перейти к сообщению
Попытался сделать также как в функции 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
Как их исправить?
7. 3d_killer - 08 Ноября, 2016 - 16:39:16 - перейти к сообщению
shonny пишет:
UPDATE FROM ip2 SET Ping=$Ping

данный запрос обновляет всю таблицу
(Добавление)
shonny пишет:
UPDATE ip2 SET Ping
а если повнимательнее посмотреть на мой запрос, разве я так писал?
(Добавление)
если у вас данные разные и читаются от сюда ip2.csv, то обновлять надо не всю таблицу, а с каким либо условием
8. LIME - 08 Ноября, 2016 - 16:53:10 - перейти к сообщению
3d_killer надо вообще все переписать
Вообще все
Начиная от конфигов
Использовать объекты читатели/писатели
Иначе придется в каждое место копипастить
Но это все лирика
По сабжу
3d_killer пишет:
UPDATE FROM
ты походу теоретик и не пишешь код
Какой такой еще фром
Перепиши Улыбка
9. 3d_killer - 08 Ноября, 2016 - 17:51:02 - перейти к сообщению
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");

(Добавление)
по поводу переписать да, идет такое обновление идет, тут раз ошибка и выкинуло нафиг с ошибкой, пол базы обновилось, половина нет
10. LIME - 08 Ноября, 2016 - 17:54:53 - перейти к сообщению
3d_killer + что признал а не полез в бутылку
По твоему примеру
Тоже не лучший вариант
Совсем плохой если честно
Не используй имя схемы
Не все субд это разрешают
Даже в случае мускула например хостинг джино это не позволит
Лучше юзать абстракцию орм
Например доктрину
Тогда и перейти проще будет ... и много еще плюсов
Ну... если интересноУлыбка просто грабли пройдены былиУлыбка
11. 3d_killer - 08 Ноября, 2016 - 17:56:47 - перейти к сообщению
по поводу имя схемы поясни, ты имел в виду префикс? типо ".PDB."?
12. LIME - 08 Ноября, 2016 - 18:01:11 - перейти к сообщению
Да
Я подумал это имя схемы
Даже если нет это не отменяет совета выше
(Добавление)
А если да то плохо что в настройках приходится добавлять точку
13. 3d_killer - 08 Ноября, 2016 - 18:02:54 - перейти к сообщению
это просто префикс в подключении указан при инсталле
PHP:
скопировать код в буфер обмена
  1. define (PDB,"rs_");
  2. //define (Base,"PostgreSQL");
  3. define (Base,"MySQL");
14. LIME - 08 Ноября, 2016 - 18:03:45 - перейти к сообщению
И статический метод....фу
Другая форма зависимости от глобального окружения
Но это такая штука....можно долго это объяснятьУлыбка
(Добавление)
Ааа...ясн
15. 3d_killer - 08 Ноября, 2016 - 18:07:18 - перейти к сообщению
а зачем не статичный? мне экземпляры не нужны
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.  

 

Powered by ExBB FM 1.0 RC1