我遇到了这个MySql查询的问题:
INSERT INTO groups (NAME, DESC, TIME, OWNER) VALUES ('$GNAME', '$DESC', '$TIME', '$UID')
本质上,该脚本将注册该组的人员的组名,描述,时间和用户名添加到mysql数据库中。
完整脚本:
<?php
include_once('include/session.php');
$GNAME = $_POST['groupname'];
$DESC = $_POST['desc'];
$SPAM = $_POST['spam'];
$UID = $_POST['UID'];
$TIME = date('Y-m-d H:i:s');
if($SPAM == "queuee"){
$query ="INSERT INTO groups (NAME, DESC, TIME, OWNER) VALUES ('$GNAME','$DESC','$TIME', '$UID')";
$result = mysql_query($query) or die("There as been an Error! <hr>Error:<hr>".mysql_error() ."<br><hr><a href=\"../index.php\">Go Back</a>");
header("Location: ../group.php?id=$GNAME");
}else{
?>
The Security Question was wrong. Try Again.
<?
}
?>
我使用Phpmyadmin直接将查询运行到MySql中。但它仍然犯了一个错误。 错误是:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC, TIME, OWNER) VALUES ('$GNAME', '$DESC', '$TIME', '$UID')' at line 1
任何帮助都非常感谢,也许我是一个完全傻瓜而没有注意到一个明显的错误。如果您需要更多信息,请询问!
非常感谢。
答案 0 :(得分:6)
“DESC”是一个关键字。把它放在反引号中。
..., `DESC`, ...
答案 1 :(得分:3)
DESC
是保留的keyword。如果必须将它用作列名,请将其包装在反引号中:
`DESC`
答案 2 :(得分:2)
尝试:
INSERT INTO groups (`NAME`, `DESC`, `TIME`, `OWNER`) VALUES ('$GNAME','$DESC','$TIME', '$UID')";
你使用保留字作为列名 - 在这种情况下PHP非常混乱。
我还应该补充一点,你的代码对SQL注入是开放的,你应该考虑不再使用mysql_ *函数。
mysqli的快速入门指南位于http://www.php.net/manual/en/mysqli.quickstart.php
PDO是另一种选择;准备好的陈述信息在http://www.php.net/manual/en/pdo.prepared-statements.php
答案 3 :(得分:1)
DESC是SQL关键字,使用``来转义列名:
$query ="INSERT INTO `groups` (`NAME`, `DESC`, `TIME`, `OWNER`) VALUES ('$GNAME','$DESC','$TIME', '$UID')";
答案 4 :(得分:1)
根据MySQL Reserved Words,“DESC”这个词不能用作字段名,除非你用反引号括起来。
答案 5 :(得分:0)
在“INSERT INTO groups”部分中,在DESC周围放置单引号(或双引号)。 DESC是保留字,必须引用。
答案 6 :(得分:0)
使用
$DESCRIPTION = $_POST['desc'];
而不是
$DESC = $_POST['desc'];
$ DESCRIPTION 在您的查询中使用变量
$query ="INSERT INTO groups (NAME, DESC, TIME, OWNER) VALUES ('$GNAME','$DESCRIPTION','$TIME', '$UID')";