尝试将已解析的XML值加载到MySQL

时间:2016-02-27 16:34:10

标签: php mysql sql xml xml-parsing

我知道这可能是一个愚蠢的问题而且解决方案是微不足道的,但我花了最后两个小时试图弄清楚这一点。我在PHP中收到的关于我的SQL查询的错误如下:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'group)VALUES(772,1227,818,0,16,2,9,92 -35',213)'at   第1行

通过研究,我认为我插入的数据类型是错误的。我的表格设置如下:

schedules table

通过使用get类型,我注意到我的值是字符串。我在解析XML文件时将它们转换为int,并使用get-type进行检查以确定。我在get-type命令旁边注释了结果。这是我用来提取值并在日程表中加载它们的PHP代码。

function loadSchedules($xml, $connection)
    {
        echo "\n\r" . 'Loading Schedules';
        $connection->query("TRUNCATE TABLE schedules");
        foreach($xml->schedules->schedule as $item)
        {
            $schedule_id = intval($connection->real_escape_string($item->attributes()->id));
            $course_id = intval($connection->real_escape_string($item->attributes()->course_id));
            $turn_part_id = intval($connection->real_escape_string($item->attributes()->turn_part_id));
            $day = intval($connection->real_escape_string($item->attributes()->day));
            $units_in_day = intval($connection->real_escape_string($item->attributes()->units_in_day));
            $duration = intval($connection->real_escape_string($item->attributes()->duration));
            $room_id = intval($connection->real_escape_string($item->attributes()->room_id));
            $period = $connection->real_escape_string($item->attributes()->period);

            //Saznaj za koju se grupu odnosi preko turn_part_id - lakše je tako nego da mobitel to radi, brže će se app izvoditi

            $result = $connection->query("SELECT * FROM courses WHERE turn_part_id=$turn_part_id");
            while($row = mysqli_fetch_array($result))
            {
                //print $row['groups'];
                $group = $row['groups'];
                //echo "\n\r" . gettype($group); // String

                $group = intval($group);


                echo "\n\r schedule_id " . gettype($schedule_id); // Integer
                echo "\n\r course_id " . gettype($course_id); // Integer
                echo "\n\r turn_part_id " . gettype($turn_part_id); // Integer
                echo "\n\r day " . gettype($day); // Integer
                echo "\n\r units_in_day " . gettype($units_in_day); // Integer
                echo "\n\r duration " . gettype($duration); // Integer
                echo "\n\r room_id " . gettype($room_id); // Integer
                echo "\n\r period " . gettype($period); // String
                echo "\n\r group " . gettype($group); // Integer

                //die;
                if(!mysqli_query($connection, "INSERT INTO `schedules` (schedule_id, course_id, turn_part_id, day, units_in_day, duration, room_id, period, group) VALUES ($schedule_id, $course_id, $turn_part_id, $day, $units_in_day, $duration, $room_id, '$period', $group);"))
                {
                    echo mysqli_error($connection);
                }
            }
        }
    }

我试图从XML加载的示例行(我正在跳过一些值,因为它们与我的项目无关,它是一个学校日程安排应用程序,我正在解析Wisetimetable生成的XML并将值加载到一个MySQL DB所以我可以从Android设备中检索这些数据。)

<schedule id="1" course_id="691" turn_part_id="1" day="0" units_in_day="18" duration="4" room_id="7" period="21-35" flags="1"/>

有人能指出我做错了什么吗?我会很感激我得到的任何答案,我还在学习,并且我很长时间没有使用过SQL。

1 个答案:

答案 0 :(得分:1)

MySQL无法解析查询

INSERT INTO `schedules` (schedule_id, ...., group) 
VALUES (....)

因为GROUP是SQL中的保留字。对于MySQL,你需要使用backtics来逃避它。

任何时候你看到这个:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在

附近使用正确的语法

这是因为SQL查询本身存在语法错误。在检查名称和类型之前解析查询时会发生这种情况。