PHP.SU

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


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

> Описание: данные в mssql через php
Jonsnow
Отправлено: 12 Августа, 2019 - 02:29:34
Post Id


Новичок


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


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




Всем Доброго времени суток.

Обращаюсь с такой проблемой.
Через php подключаюсь к АPI и вывожу данные на страницу.
Данные выводятся как обычный текст, но когда нажимаю посмотреть код страницы то там высветливается XML формат в виде:

CODE (html):
скопировать код в буфер обмена
  1. <root>
  2. <dane>
  3. <ID>1</ID>
  4. <Nr>1</Nr>
  5. <Status />
  6. <Name>Jonsnow for a example</Name>
  7. </dane>
  8. </root>



И необходимо добавить это в базы данных MSSQL желательно сразу данные по столбцам. но было бы хорошо хотябы в один столбец XML данные, уже через MSSQL парсировать буду
С Уважением
 
 Top
LIME
Отправлено: 12 Августа, 2019 - 04:21:09
Post Id



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


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


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




А чему ты удивляешься? Браузер обнаружил тэги и не стал их отображать. HTML это подмножество XML если что.
Получить данные из структуры проще всего через https://www.php.net/manual/ru/si...amples-basic.php


-----
DDD
 
 Top
Jonsnow
Отправлено: 12 Августа, 2019 - 15:07:22
Post Id


Новичок


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


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




LIME пишет:
А чему ты удивляешься? Браузер обнаружил тэги и не стал их отображать. HTML это подмножество XML если что.
Получить данные из структуры проще всего через https://www.php.net/manual/ru/simplexml.examples-basic.php


Попробую по подробнее написать:

Вообщем написал sql Код который парсирует данные и вставляет их в таблицу, но статический по типу:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. DECLARE @FileNameDaneSzukajPodmioty nvarchar(255)
  3.     SET @FileNameDaneSzukajPodmioty = N'E:\DaneSzukajPodmioty.xml'
  4. DECLARE @xml XML
  5. DECLARE @xmlload nvarchar (300)
  6.  
  7. CREATE TABLE DaneSzukajPodmioty_TABLE(
  8.     Numer INT NOT NULL,
  9.     Regon [varchar](14),
  10.     Nip [varchar](10),
  11.     StatusNip [varchar](50),
  12.     Nazwa [varchar](2000),
  13.     Wojewodztwo [varchar](200),
  14.     Powiat [varchar](200),
  15.     Gmina [varchar](200),
  16.     Miejscowosc [varchar](200),
  17.     KodPocztowy [varchar](12),
  18.     Ulica [varchar] (200) ,
  19.     NrNieruchomosci [varchar](20) ,
  20.     NrLokalu [varchar] (10) ,
  21.     Typ [varchar] (2) ,
  22.     SilosID [varchar] (20) ,
  23.     DataZakonczeniaDzialalnosci [varchar] (10)
  24.  
  25. CONSTRAINT [DSP_PK] PRIMARY KEY ([Numer])
  26.  
  27. )
  28.  
  29.     SET @xmlload = N'
  30. SELECT @xml = CAST(MY_XML AS XML)
  31.    FROM OPENROWSET(BULK N'''+ @FileNameDaneSzukajPodmioty + ''', SINGLE_BLOB) T(MY_XML)'
  32.     EXEC sp_executesql @xmlload, N'@xml xml output', @xml=@xml output
  33. INSERT INTO DaneSzukajPodmioty_TABLE (Numer, Regon, Nip, StatusNip, Nazwa,Wojewodztwo,Powiat,Gmina,Miejscowosc,KodPocztowy,Ulica,NrNieruchomosci,NrLokalu,Typ,SilosID,DataZakonczeniaDzialalnosci)
  34. SELECT
  35.    ROW_NUMBER() OVER(ORDER BY 1/0) AS Numer,
  36.     t.dsp.value('(Regon/text())[1]', 'VARCHAR(14)'),
  37.     t.dsp.value('(Nip/text())[1]', 'VARCHAR(10)'),
  38.     t.dsp.value('(StatusNip/text())[1]', 'VARCHAR(50)'),
  39.     t.dsp.value('(Nazwa/text())[1]', 'VARCHAR(2000)'),
  40.     t.dsp.value('(Wojewodztwo/text())[1]', 'VARCHAR(200)'),
  41.     t.dsp.value('(Powiat/text())[1]', 'VARCHAR(200)'),
  42.     t.dsp.value('(Gmina/text())[1]', 'VARCHAR(200)'),
  43.     t.dsp.value('(Miejscowosc/text())[1]', 'VARCHAR(200)'),
  44.     t.dsp.value('(KodPocztowy/text())[1]', 'VARCHAR(12)'),
  45.     t.dsp.value('(Ulica/text())[1]', 'VARCHAR(200)'),
  46.     t.dsp.value('(NrNieruchomosci/text())[1]', 'VARCHAR(20)'),
  47.     t.dsp.value('(NrLokalu/text())[1]', 'VARCHAR(10)'),
  48.     t.dsp.value('(Typ/text())[1]', 'VARCHAR(2)'),
  49.     t.dsp.value('(SilosID/text())[1]', 'VARCHAR(20)'),
  50.     t.dsp.value('(DataZakonczeniaDzialalnosci/text())[1]', 'VARCHAR(10)')
  51.    FROM @xml.nodes('root/dane') t(dsp)
  52. /*----------------------------------------------------------------------------------------------------------*/
  53. SELECT * FROM DaneSzukajPodmioty_TABLE
  54. /*----------------------------------------------------------------------------------------------------------*/




Файл E:\DaneSzukajPodmioty.xml содержит :

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <root>
  3.   <dane>
  4.     <Regon>номер..</Regon>
  5.     <Nip>номер...</Nip>
  6.     <StatusNip />
  7.     <Nazwa>название</Nazwa>
  8.     <Wojewodztwo>название</Wojewodztwo>
  9.     <Powiat>название</Powiat>
  10.     <Gmina>название</Gmina>
  11.     <Miejscowosc>название</Miejscowosc>
  12.     <KodPocztowy>номер..</KodPocztowy>
  13.     <Ulica>улица</Ulica>
  14.     <NrNieruchomosci>номер</NrNieruchomosci>
  15.     <NrLokalu />
  16.     <Typ>название</Typ>
  17.     <SilosID>номер</SilosID>
  18.     <DataZakonczeniaDzialalnosci />
  19.   </dane>
  20. <root>





Но нужно это делать динамический, в этом случае подключаюсь к апи через php и вывожу информацию на страницу, получаю вот что:

CODE (html):
скопировать код в буфер обмена
  1. <root>
  2.   <dane>
  3.     <Regon>номер..</Regon>
  4.     <Nip>номер...</Nip>
  5.     <StatusNip />
  6.     <Nazwa>название</Nazwa>
  7.     <Wojewodztwo>название</Wojewodztwo>
  8.     <Powiat>название</Powiat>
  9.     <Gmina>название</Gmina>
  10.     <Miejscowosc>название</Miejscowosc>
  11.     <KodPocztowy>номер..</KodPocztowy>
  12.     <Ulica>улица</Ulica>
  13.     <NrNieruchomosci>номер</NrNieruchomosci>
  14.     <NrLokalu />
  15.     <Typ>название</Typ>
  16.     <SilosID>номер</SilosID>
  17.     <DataZakonczeniaDzialalnosci />
  18.   </dane>
  19. <root>


По факту такое же, только необходимо эту информацию через php втянуть в базу данных


Мои попытки:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include 'gusregonapi.php';
  3. $nip = 'номер';
  4. $gus = new GusRegonApi();
  5. $result = $gus->checkNip($nip);
  6.  
  7. try
  8. {
  9.    $conn = new PDO("sqlsrv:Server=$server;Database=test", "sa", "password");
  10.    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11. }
  12. catch(Exception $e)
  13. {
  14.     die (print_r($e->getMessage()));
  15. }
  16. $sql = "DECLARE @FileNameDaneSzukajPodmioty nvarchar(255)
  17.    SET @FileNameDaneSzukajPodmioty = N'".$result."'
  18. DECLARE @xml XML
  19. DECLARE @xmlload nvarchar (300)
  20.  
  21. SET @xmlload = N'
  22. SELECT @xml = CAST(MY_XML AS XML)
  23.    FROM OPENROWSET(BULK N'''+ @FileNameDaneSzukajPodmioty + ''', SINGLE_BLOB) T(MY_XML)'
  24.    EXEC sp_executesql @xmlload, N'@xml xml output', @xml=@xml output
  25. INSERT INTO DaneSzukajPodmioty_TABLE (Numer, Regon, Nip, StatusNip, Nazwa,Wojewodztwo,Powiat,Gmina,Miejscowosc,KodPocztowy,Ulica,NrNieruchomosci,NrLokalu,Typ,SilosID,DataZakonczeniaDzialalnosci)
  26. SELECT
  27.   ROW_NUMBER() OVER(ORDER BY 1/0) as Numer,
  28.    t.dsp.value('(Regon/text())[1]', 'VARCHAR(14)'),
  29.    t.dsp.value('(Nip/text())[1]', 'VARCHAR(10)'),
  30.    t.dsp.value('(StatusNip/text())[1]', 'VARCHAR(50)'),
  31.    t.dsp.value('(Nazwa/text())[1]', 'VARCHAR(2000)'),
  32.    t.dsp.value('(Wojewodztwo/text())[1]', 'VARCHAR(200)'),
  33.    t.dsp.value('(Powiat/text())[1]', 'VARCHAR(200)'),
  34.    t.dsp.value('(Gmina/text())[1]', 'VARCHAR(200)'),
  35.    t.dsp.value('(Miejscowosc/text())[1]', 'VARCHAR(200)'),
  36.    t.dsp.value('(KodPocztowy/text())[1]', 'VARCHAR(12)'),
  37.    t.dsp.value('(Ulica/text())[1]', 'VARCHAR(200)'),
  38.    t.dsp.value('(NrNieruchomosci/text())[1]', 'VARCHAR(20)'),
  39.    t.dsp.value('(NrLokalu/text())[1]', 'VARCHAR(10)'),
  40.    t.dsp.value('(Typ/text())[1]', 'VARCHAR(2)'),
  41.    t.dsp.value('(SilosID/text())[1]', 'VARCHAR(20)'),
  42.    t.dsp.value('(DataZakonczeniaDzialalnosci/text())[1]', 'VARCHAR(10)')
  43.   FROM @xml.nodes('root/dane') t(dsp)
  44. /*----------------------------------------------------------------------------------------------------------*/
  45. SELECT * FROM DaneSzukajPodmioty_TABLE
  46. /*----------------------------------------------------------------------------------------------------------*/";
  47. $getResults= $conn -> prepare($sql);
  48.     $getResults ->execute();
  49.     $result = $getResults ->fetchAll(PDO::FETCH_BOTH);


Не получается из-за

CODE (htmlphp):
скопировать код в буфер обмена
  1. Cannot bulk load because the file "" could not be opened. Operating system error code 3(Система не может открыть файл.).


Вот вся проблема.

Может есть легче способ? или как?
С Уважением
 
 Top
LIME
Отправлено: 12 Августа, 2019 - 15:30:18
Post Id



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


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


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




Jonsnow так ты же в процедуре mssql из файла читаешь
Тут либо результат сначала в этот файл сохранить, что изврат и я ржу вообще. Либо распарсить на пхп как в ссылке выше и просто положить в mssql готовые данные и не чистить зубы через анус.


-----
DDD
 
 Top
Jonsnow
Отправлено: 16 Августа, 2019 - 12:48:20
Post Id


Новичок


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


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




LIME пишет:
Jonsnow так ты же в процедуре mssql из файла читаешь
Тут либо результат сначала в этот файл сохранить, что изврат и я ржу вообще. Либо распарсить на пхп как в ссылке выше и просто положить в mssql готовые данные и не чистить зубы через анус.


Спасибо большое все получились, но есть ошибка одна с парсингом привожу пример код

Xml Code
<root>
<data>
<Name>Babies 'PROTECT' goofs<Name>
<data>
<root>
Php code
$root =new Simplexmlelement($xmlcode);
$name =$root -> data[0]-> Name;

$sql= “ insert into table(name) values ( '$name ');”;
$get=$conn->prepare($sql);
$get->execute();

Fatal error: uncaught pdoexection..... incorrect syntax near 'PROTECT '
 
 Top
LIME
Отправлено: 16 Августа, 2019 - 12:54:52
Post Id



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


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


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




тут должна быть видна ошибка
Можно кавычки ескейпить но лучше сразу делать как следует
https://www.php.net/manual/ru/pd...d-statements.php
(Добавление)
Передавай данные через плэйсхолдеры


-----
DDD
 
 Top
Jonsnow
Отправлено: 16 Августа, 2019 - 13:31:20
Post Id


Новичок


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


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




LIME пишет:тут должна быть видна ошибка
Можно кавычки ескейпить но лучше сразу делать как следует
https://www.php.net/manual/ru/pd...d-statements.php
(Добавление)
Передавай данные через плэйсхолдеры


Спасибо большое, вы правы, заработало
Буду разбираться и делать так
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB