PHP 读取XML大文件格式并将其存入数据库中

时间:2024-02-17 22:08:13
<?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 "成功<br/>";
}
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中的写法  , 字符串或者变量应该使用单引号\'\' 扩起来 ,外层使用双引号。