今天要做访问一个连接,连接返回的结果是一个字符串的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);
….