Прямой запрос к базе Mysql

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Lyryks
Сообщения: 6
Зарегистрирован: Чт апр 02, 2020 10:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Прямой запрос к базе Mysql

Сообщение Lyryks » Вт сен 15, 2020 6:39 am

Спасибо, я теперь разобрался. Сразу получилось выбрать несколько показателей с одной таблицы.
На счет массивов я догадывался что лучше так не делать :D
Jilber писал(а):
Пн сен 14, 2020 11:35 pm
Сейчас человеку нужно понять как вообще получить что-то из базы и вывести куда-то (просто в свойство, на сцену, в меню, и т.д.). Этот запрос и таблицу "test" он привёл просто для примера. Когда с этим разберётся тогда подскажете ему с конкретным запросом к конкретной таблице. :-)
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Прямой запрос к базе Mysql

Сообщение PAV » Чт дек 24, 2020 4:02 pm

Озадачился тут тоже вопросом с MYSQL.
Была задача вывести все значения свойства объекта.
Делюсь.
В phpmyadmin находим VALUE_ID свойства, которе надо выводить.
Ищем свойства в pvalues потом в phistory
Делаем страничку logger.php
Туда втыкаем:

Код: Выделить всё

<?php
  $host = 'localhost';  // Хост, у нас все локально
  $user = 'root';    // Имя созданного вами пользователя
  $pass = 'mypassword'; // Установленный вами пароль пользователю
  $db_name = 'db_terminal';   // Имя базы данных
  $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

  // Ругаемся, если соединение установить не удалось
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }

$sql = mysqli_query($link, 'SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC LIMIT 0,100');
// тут написано - выбираем поля ADDED и VALUE из таблицы phistory для свойства с VALUE_ID=2405 сортируем по столбцу  ADDED в обратном порядке и выводим с 0 значения последние 100 
  while ($result = mysqli_fetch_array($sql)) {
        echo '<p style="color: white">' . "{$result['ADDED']}: {$result['VALUE']}<br>" . '</p>' ;
  }

Во результату получится страница значений в столбик, типа как история.
Я использую, например, если нужно чтобы какой-то модуль писал логи. Например ESPшка отсылает по окончании инициализации

Код: Выделить всё

#if DEBUG == 1
   sprintf(buf, "GET /objects/?object=Logger&op=m&m=commandReceived&value=EndSetup");
   sendHTTPRequest();
#endif
В методе commandReceived пишем

Код: Выделить всё

sg("Logger.Power", $params['value']);
После этого можно смотреть лог работы устройства просто выведя все значения из mysql.

Можно вывести в файл.
добавить INTO OUTFILE 'logger.csv'
SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC INTO OUTFILE '/var/lib/mysql-files/logger.csv'

/var/lib/mysql-files/ - обычно директория, куда MYSQL имеет право писать файлы. Только предварительно дайте этой директории права 777

Гуру, поправьте, плиз, код, точно знаю, что можно уйти от логина/пароля.
За это сообщение автора PAV поблагодарил:
Chainik (Чт дек 24, 2020 4:25 pm)
Рейтинг: 1.16%
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Прямой запрос к базе Mysql

Сообщение fandaymon » Чт дек 24, 2020 5:34 pm

PAV писал(а):
Чт дек 24, 2020 4:02 pm
Озадачился тут тоже вопросом с MYSQL.
Была задача вывести все значения свойства объекта.
Делюсь.
В phpmyadmin находим VALUE_ID свойства, которе надо выводить.
Ищем свойства в pvalues потом в phistory
Делаем страничку logger.php
Туда втыкаем:

Код: Выделить всё

<?php
  $host = 'localhost';  // Хост, у нас все локально
  $user = 'root';    // Имя созданного вами пользователя
  $pass = 'mypassword'; // Установленный вами пароль пользователю
  $db_name = 'db_terminal';   // Имя базы данных
  $link = mysqli_connect($host, $user, $pass, $db_name); // Соединяемся с базой

  // Ругаемся, если соединение установить не удалось
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }

$sql = mysqli_query($link, 'SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC LIMIT 0,100');
// тут написано - выбираем поля ADDED и VALUE из таблицы phistory для свойства с VALUE_ID=2405 сортируем по столбцу  ADDED в обратном порядке и выводим с 0 значения последние 100 
  while ($result = mysqli_fetch_array($sql)) {
        echo '<p style="color: white">' . "{$result['ADDED']}: {$result['VALUE']}<br>" . '</p>' ;
  }

Во результату получится страница значений в столбик, типа как история.
Я использую, например, если нужно чтобы какой-то модуль писал логи. Например ESPшка отсылает по окончании инициализации

Код: Выделить всё

#if DEBUG == 1
   sprintf(buf, "GET /objects/?object=Logger&op=m&m=commandReceived&value=EndSetup");
   sendHTTPRequest();
#endif
В методе commandReceived пишем

Код: Выделить всё

sg("Logger.Power", $params['value']);
После этого можно смотреть лог работы устройства просто выведя все значения из mysql.

Можно вывести в файл.
добавить INTO OUTFILE 'logger.csv'
SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC INTO OUTFILE '/var/lib/mysql-files/logger.csv'

/var/lib/mysql-files/ - обычно директория, куда MYSQL имеет право писать файлы. Только предварительно дайте этой директории права 777

Гуру, поправьте, плиз, код, точно знаю, что можно уйти от логина/пароля.
Есть же встроенные команды SQLSelect(), SQLSelectOne, SQLUpdate() и SQLExec(), зачем велосипед изобретать?

https://kb.mjdm.ru/funkcii-raboti-s-baz ... majordomo/

Как работать с историей можно посмотреть здесь

https://kb.mjdm.ru/vstroennie-v-majordomo-funkcii/
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Прямой запрос к базе Mysql

Сообщение PAV » Чт дек 24, 2020 6:39 pm

fandaymon писал(а):
Чт дек 24, 2020 5:34 pm

Есть же встроенные команды SQLSelect(), SQLSelectOne, SQLUpdate() и SQLExec(), зачем велосипед изобретать?

https://kb.mjdm.ru/funkcii-raboti-s-baz ... majordomo/

Как работать с историей можно посмотреть здесь

https://kb.mjdm.ru/vstroennie-v-majordomo-funkcii/
Создаю домашнюю страницу HTML
Туда пишу

Код: Выделить всё

$data = getHistory("Logger.Power");
echo print_r($data, true)."<br/>\n";
страничка ничего не выводит. Что не так?
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Прямой запрос к базе Mysql

Сообщение fandaymon » Чт дек 24, 2020 6:48 pm

PAV писал(а):
Чт дек 24, 2020 6:39 pm
fandaymon писал(а):
Чт дек 24, 2020 5:34 pm

Есть же встроенные команды SQLSelect(), SQLSelectOne, SQLUpdate() и SQLExec(), зачем велосипед изобретать?

https://kb.mjdm.ru/funkcii-raboti-s-baz ... majordomo/

Как работать с историей можно посмотреть здесь

https://kb.mjdm.ru/vstroennie-v-majordomo-funkcii/
Создаю домашнюю страницу HTML
Туда пишу

Код: Выделить всё

$data = getHistory("Logger.Power");
echo print_r($data, true)."<br/>\n";
страничка ничего не выводит. Что не так?
В html пишете пхпшные команды?!
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Прямой запрос к базе Mysql

Сообщение PAV » Чт дек 24, 2020 6:51 pm

fandaymon писал(а):
Чт дек 24, 2020 6:48 pm
В html пишете пхпшные команды?!
Как вывести на страницу все значения свойства Logger.Power?
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Прямой запрос к базе Mysql

Сообщение PAV » Чт дек 24, 2020 7:04 pm

Так тоже не работает в logger.php

Код: Выделить всё

   <?php
  
   $sql = SQLSelectOne('SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC LIMIT 0,100');
  while ($result = mysqli_fetch_array($sql)) {
	echo '<p style="color: white">' . "{$result['ADDED']}: {$result['VALUE']}<br>" . '</p>' ;
  }
   
   ?>
   
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Прямой запрос к базе Mysql

Сообщение fandaymon » Чт дек 24, 2020 7:14 pm

PAV писал(а):
Чт дек 24, 2020 7:04 pm
Так тоже не работает в logger.php

Код: Выделить всё

   <?php
  
   $sql = SQLSelectOne('SELECT ADDED,VALUE FROM phistory WHERE VALUE_ID=2405 ORDER BY ADDED DESC LIMIT 0,100');
  while ($result = mysqli_fetch_array($sql)) {
	echo '<p style="color: white">' . "{$result['ADDED']}: {$result['VALUE']}<br>" . '</p>' ;
  }
   
   ?>
   
Проще всего - добавить весь код в какой-нибудь сценарий и вызывать этот самый сценарий через URL

А для того чтобы отдельный php скрипт работал с функциями МДМ нужно сделать правильные include

Код: Выделить всё

include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
 
// соединяемся с базой данных
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME); 
 
// загружаем настройки
include_once("./load_settings.php");
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Прямой запрос к базе Mysql

Сообщение PAV » Чт дек 24, 2020 9:12 pm

Так, разбираемся...
В дополнение такой же список можно получить и так:
Добавляем в сценарий и при исполнении получаем

Код: Выделить всё

$sql=getHistory("Logger.Power", -6000); // обьект.свойство, интервал. сейчас минус 6000 секунд
$i = 0; // переменная для нумерации строк
foreach ($sql as $sql)
{
if ($sql['VALUE']){
$reztab = $sql['ADDED'].' '.$sql['VALUE'].'<br>';
echo ($reztab);
$i ++;} 

}
За это сообщение автора PAV поблагодарил:
Chainik (Чт дек 24, 2020 9:26 pm)
Рейтинг: 1.16%
Ответить