我知道这可能是一个愚蠢的问题而且解决方案是微不足道的,但我花了最后两个小时试图弄清楚这一点。我在PHP中收到的关于我的SQL查询的错误如下:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'group)VALUES(772,1227,818,0,16,2,9,92 -35',213)'at 第1行
通过研究,我认为我插入的数据类型是错误的。我的表格设置如下:
通过使用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。
答案 0 :(得分:1)
MySQL无法解析查询
INSERT INTO `schedules` (schedule_id, ...., group)
VALUES (....)
因为GROUP
是SQL中的保留字。对于MySQL,你需要使用backtics来逃避它。
任何时候你看到这个:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在
附近使用正确的语法
这是因为SQL查询本身存在语法错误。在检查名称和类型之前解析查询时会发生这种情况。