将XML数据插入MySQL数据库错误消息

时间:2016-12-04 20:05:36

标签: php mysql xml

晚上好,今天我一直在尝试制定一个关于将我的xml数据提交到我的MySQL数据库的公式,这是我之前没有考虑过的事情,但我一直在努力尝试,但不幸的是不成功,我在第9行收到以下错误消息Parse error: syntax error, unexpected '(', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in locations.php  请在下面找到我的xml文件,这是一个示例,我的PHP代码,如果有人能够帮助我真的很感激,非常感谢

XML

<?xml version="1.0" encoding="utf-8"?>
    <datafile>
    <data name="Area One">
        <category>Place One</category>
        <title name="One" size="100" color="red" />
        <title name="Two" size="150" color="yellow" />
        <title name="Three" size="200" color="pink" />
        <title name="Four" size="250" color="green" />
        <title name="Five" size="300" color="purple" />
    </data>
    <data name="Area Two">
        <category>Place Two</category>
        <title name="One" size="500" color="orange" />
        <title name="Two" size="550" color="blue" />
        <title name="Three" size="600" color="silver" />
        <title name="Four" size="650" color="white" />
        <title name="Five" size="700" color="gold" />
    </data>
</datafile>

PHP     

    $xml = simplexml_load_file("locations.xml") 
        or die("Error: Cannot create object");

    foreach($xml->children() as $data) { 
        echo $data->('data name') . ", "; 
        echo $data->category . ", "; 
        echo $data->('title name') . $data->('size') . $data->('color') . "<br>";
    }

    $sql = "INSERT INTO data (data-name, category, information)
        VALUES ('', '', '')";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $db->error;
    }

我一直在尝试将xml文件中的每个数据名称插入到自己的mysql记录中 “数据名称”进入“数据名称” “类别”进入“类别”

当谈到“标题名称”,“大小”和“颜色”时,它们都共享“信息”字段,例如

"one, 100, red
two, 150, yellow
three, 200, pink
four, 250, green
five, 300, purple"

我提前道歉,如果我说的方式令人困惑,请随时问我任何问题,非常感谢

1 个答案:

答案 0 :(得分:0)

首先,正如@ Fred-ii所述,

  

.... data-name MySQL将其解释为data minus name

因此,请将列名更改为dataname或符合您需要的内容以及有效的列名。

其次,语法错误是由于这些行,

echo $data->('data name') . ", "; 
            ^^^^^^^^^^^^^

echo $data->('title name') . $data->('size') . $data->('color') . "<br>";
            ^^^^^^^^^^^^^^          ^^^^^^^^          ^^^^^^^^^ 

如果您计划将这些信息插入数据库表,那么您的foreach循环应如下所示:

foreach($xml->children() as $data){ 

    foreach($data->attributes() as $name){
        $dataName = $name;
    }
    $category = $data->category;
    foreach($data->title as $title){
        $attr = array();
        foreach($title->attributes() as $attribute){
            $attr[] = $attribute;
        }
        $information = implode(",", $attr);
        $sql = "INSERT INTO `data` (`dataname`, `category`, `information`) VALUES ('{$dataName}', '{$category}', '{$information}')";

        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    }
}

包装所有内容的其他要点很少

  1. data是MySQL中的保留字,因此您不能将其用作查询中的表名。最好使用反引号来转义那些表名和列名。

    以下是参考资料:

  2. $db->error应为$conn->error