2014-10-14 3 views
0

У меня есть таблица mySQL db. Один из столбцов таблицы содержит URL-адреса, которые указывают на разные XML-файлы на удаленном сервере.PHP/mySQL get_file_contents и обновить столбец

Моя цель - прочитать каждую информацию о URL-адресах и написать содержимое xml в другой столбец в той же записи (строке) соответственно.

В моем PHP-коде я могу правильно получить URL-адрес из базы данных mySQL, и я могу правильно получить XML-содержимое на удаленном сервере в переменную.

Но проблема в том, что я пишу контент в свою таблицу по строкам. Некоторые столбцы XML правильно обновились, а некоторые столбцы XML пустые.

Я уверен, что каждый раз, когда переменная получает контент правильно, я могу распечатать каждый отдельный контент на экране.

Почему некоторый контент обновляет колонку, а некоторые нет. Все строки XML имеют одинаковый формат. Если я скопировал этот контент и обновил таблицу mysql вручную, он успешно записал в таблицу.

В начале я подумал, что это вопрос времени, поэтому я добавляю достаточно времени для моего PHP-кода. это не поможет. то я подозревал свой datatype моего db, поэтому я изменил тип данных столбца XML от VCHAR до TEXT и даже LONGTEXT. это тоже не поможет. У кого-нибудь есть ключ?

часть моего кода PHP ниже ...

$result = mysqli_query($con,"SELECT url_txt FROM mytable "); 

//work with result line by line: 
while($row = mysqli_fetch_array($result)) { 

echo $url_content = file_get_contents($row['url_txt']); 

//debug line below *******************************/ 
echo $URL=$row[url_txt]; 
//debug line above********************************/ 
mysqli_query($con,"UPDATE mytable SET xml_info='$url_content' where url_txt = '$URL' "); 

    } 
+0

способ использования соединителя MySQLi дБ делает ваш код уязвимым для SQL-инъекции. Читайте о «подготовленных заявлениях»! – arkascha

+1

Скорее всего, это также ваша проблема: сломанные sql-заявления из-за SQL-инъекции. Это происходит, например, если '$ url_content' содержит такие вещи, как кавычки, которые не обрабатываются правильно, как вы строите свой оператор. Я предлагаю вам сбросить созданные SQL-запросы вместо того, чтобы запускать их для теста. Затем внимательно рассмотрите тот, который не работает, и вы поймете, в чем проблема. – arkascha

+0

Что сказал @arkascha +, если «запуск вручную» означает обновление строк с помощью phpmyadmin, phpmyadmin будет избегать ввода для вас. Если ваши XML-данные находятся в одном формате, добавьте несколько примеров в вопрос – Kyborek

ответ

0

Может попробовать преобразовать ваш XML в родной массив и работать с ним таким образом:

$array = json_decode(json_encode(simplexml_load_string($url_content)),TRUE); 
+0

Программирование - это не игра с угадыванием ... – arkascha

+1

Программирование не менее 60% игры с угадыванием. –

+0

Тогда вы один из тех миллионов парней, которые постоянно угадывают, а не программируют. Я никогда не понимал этого подхода. Это так много времени и обычно приводит к ужасным результатам. Подсказка: можно научиться программировать. _shaking head_ – arkascha

Смежные вопросы