访问url返回xml进行解析存入数据库

今天要做访问一个连接,连接返回的结果是一个字符串的xml,最后将其解析存入数据库

解析url,我用到了一个方法:

function getHtml($url){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

$str = curl_exec($curl);

curl_close($curl);

return $str;

}

 

他返回的是一个字符串的xml,需要将其转换为一个对象

$str = getHtml($url);

$xml = simplexml_load_string($str);

$childList = $xml->children();

得到的$childList便是一个数组

要访问$childList里面的值,就可以

$childList ->chain->item->other->…->title

但是要访问一个值,感觉这样写太麻烦了,以后用到某个值的时候要写很多层,所以相把最终的值都放到一个数组的第一层下面,即以后要访问某个值的时候直接可以list['title']

接着就是将其放入到数据库了,通过循环赋值一条一条的插入,利用一个for循环

for ( $j = 0;$j < count($list); $j++ ) {

$db = new PDO(‘sqlite:stars.db’);

$sql = ”insert into star(‘id’,'title’,'detail’,'pubDate’)  values(null,(string)$list['title'],

(string)$list['detail'], (string)$list['pubDate'])”;

$sth ->$db ->prepare($sql);

$sth ->execute();

}

 

但是这样试了n次,一条数据都没插进去,输入(string)$list['title'] 这些值完全没有问题,而且在java中,像这样在书写是完全没有任何问题的,只 能无语

最后想起java中还有可以动态赋值,于是乎试了试,ok,问题解决了,想了想, 可能是(string)$list['title']等这些值内容过长,这样写的时候插入会 有错误,利用动态赋值就可以解决,具体代码如下:

….

$sql = ”insert into star(‘id’,'title’,'detail’,'pubDate’)  values(null,:title,

:detail, :pubDate)”;

$sth ->bindValue(‘:title’, (string)$list['title'], PDO::  PARAM_STR);

$sth ->bindValue(‘:detail, (string)$list[detail], PDO::  PARAM_STR);

$sth ->bindValue(‘:pubDate, (string)$list[pubDate], PDO::  PARAM_STR);

….

你可能感兴趣的:(PHP)