PHP 读取XML大文件格式并将其存入数据库中
<?php
$xml = new XMLReader();
$xmlfile="./full_database.xml";#文件路径
$xml->open($xmlfile);
$i=0;
while($xml->read()) {
if($xml->name=='drug-interaction' and $xml->nodeType==XMLReader::ELEMENT) { // 进入 drug-interaction
$inXml = $xml->readOuterXML(); // 获取当前整个 drug-interaction 内容(字符串)
$inXml = simplexml_load_string($inXml); // 转换成 SimpleXMLElement 对象
// 查询出来之后存到数据库中
$conn=mysqli_connect("localhost","root","qwertyuip","qin-data");
if(!$conn)
{
die("连接数据库失败".mysqli_connect_errno($conn));
}else{
echo "成功
"; } mysqli_select_db($conn,"qin-data"); //设置字符集 mysqli_query($conn,"set name utf8"); // var_dump(object2array($inXml));die; $inXml = object2array($inXml); // var_dump($inXml['drugbank-id']);die; $data['id'] = $inXml['drugbank-id']; $data['name'] = $inXml['name']; $data['description'] = $inXml['description']; $sql = "INSERT INTO interaction(id, name, description) VALUES('$data[id]','$data[name]','$data[description]')"; $res=mysqli_query($conn,$sql); // var_dump($res);die; mysqli_close($conn); } $i++; // 继续读取 直到进入下一个 object // if($i>5000){ // continue; // } } function object2array(&$object) { $object = json_decode( json_encode( $object),true); return $object; }
"; } mysqli_select_db($conn,"qin-data"); //设置字符集 mysqli_query($conn,"set name utf8"); // var_dump(object2array($inXml));die; $inXml = object2array($inXml); // var_dump($inXml['drugbank-id']);die; $data['id'] = $inXml['drugbank-id']; $data['name'] = $inXml['name']; $data['description'] = $inXml['description']; $sql = "INSERT INTO interaction(id, name, description) VALUES('$data[id]','$data[name]','$data[description]')"; $res=mysqli_query($conn,$sql); // var_dump($res);die; mysqli_close($conn); } $i++; // 继续读取 直到进入下一个 object // if($i>5000){ // continue; // } } function object2array(&$object) { $object = json_decode( json_encode( $object),true); return $object; }
需要注意几点:
1.使用mysqli 原生语句链接
2.使用simplexml_load_string 获取到值后为对象格式,应使用PHP转成数据格式在提取值
3.注意原生sql语句在PHP中的写法 , 字符串或者变量应该使用单引号'' 扩起来 ,外层使用双引号。