在SQL语法中出现错误,请检查在第1行附近使用的正确语法。

22 浏览
0 Comments

在SQL语法中出现错误,请检查在第1行附近使用的正确语法。

我遇到了标题中提到的错误,在我的PHP文件中有以下代码,我尝试改写查询语句,但未能纠正错误,有人能告诉我为什么会有这种错误吗?我的错误方式是否不正确?我看过一些类似的帖子,但我知道问题应该是我的查询语句,但我不知道如何修改它。所以我可以请你帮忙告诉我查询的问题在哪里吗?这肯定可以帮助我搞清楚我的概念。

$query = "SELECT * 
    FROM Tech AS T, Client AS C, Site AS S, Log AS L 
    WHERE T.TechID=L.TechID, C.ClientID=L.ClientID, S.SiteID=L.SiteID";
if($sort=="Tech")
   $query += "ORDER BY T.TechName ASC, L.Time DSC";
else if($sort=="Client")
   $query += "ORDER BY C.ClientName ASC, L.Time DSC";
$result = mysql_query($query) or die('错误!' . mysql_error());; 
print "实时签到/签出";
print "";
print "";
while($row = mysql_fetch_array($result)){
print "";
print "";
print "";
print "";
print "";
}
print "
技术员客户地点日期和时间类型
".$row['T.TechName']."".$row['C.ClientName']."".$row['S.SiteName']."".$row['L.Time']."".$row['L.Type']."
";

以下是错误信息:

错误!您的SQL语法有误,请查看与您的MySQL服务器版本相对应的手册以获取正确的语法用法,位于第1行附近的位置。

0
0 Comments

原因:

出现该错误的原因是在SQL语法中存在错误。具体来说,在ORDER BY子句中,使用了不正确的语法。

解决方法:

1. 在原始的$query变量末尾添加一个空格,或者在$query +=语句的开头添加一个空格。

2. 将DSC更正为DESC,因为在SQL中使用降序排序应该是DESC。

3. 将+=更正为.=,因为在PHP中连接字符串应该使用.=。

此外,还需要注意切换编程语言时所带来的细微差异。在使用不同语言时,确保仔细检查差异。

在切换为DESC后,仍然出现ORDER BY语句错误的原因是ASC和DESC不能一起使用。在ORDER BY子句中,只能选择使用DESC或ASC。

然而,根据提供的代码,将DESC更改为ASC后,问题似乎已经解决了。

0
0 Comments

原因:在代码中出现了几个语法错误,导致错误提示信息为"Error in SQL syntax, check for right syntax to use near '0' at line 1"。具体错误如下:

1. 在WHERE子句中使用了AND关键字代替了逗号,导致语法错误。

2. 在ORDER BY子句之前有一个空格,导致语法错误。

3. 使用了".="代替了"+=",导致语法错误。

4. 在代码中使用了"DESC"代替了"DSC",导致语法错误。

解决方法:

1. 将WHERE子句中的AND关键字替换为逗号。

2. 删除ORDER BY子句之前的空格。

3. 将".="替换为"+="。

4. 将"DESC"替换为"DSC"。

以下是修复后的代码:

$query = "SELECT * 
    FROM Tech AS T, Client AS C, Site AS S, Log AS L 
    WHERE T.TechID=L.TechID, C.ClientID=L.ClientID, S.SiteID=L.SiteID";
if($sort=="Tech")
   $query .= " ORDER BY T.TechName ASC, L.Time DESC";
else if($sort=="Client")
   $query .= " ORDER BY C.ClientName ASC, L.Time DESC";

以上是出现"Error in SQL syntax, check for right syntax to use near '0' at line 1"问题的原因和解决方法。

0
0 Comments

错误出现在WHERE子句中。需要使用AND关键字来连接条件,而不是使用逗号:

SELECT * 
FROM Tech AS T, Client AS C, Site AS S, Log AS L 
WHERE T.TechID=L.TechID AND C.ClientID=L.ClientID AND S.SiteID=L.SiteID

然而,更好的解决方法是使用JOIN语句来连接表:

SELECT * 
FROM Tech AS T
JOIN Client AS C on T.TechID=L.TechID
JOIN Site AS S on C.ClientID=L.ClientID
JOIN Log AS L on S.SiteID=L.SiteID

编辑:你得到near 0 at line 1的原因是你使用+来连接字符串,而不是使用.运算符。当你使用+时,PHP会将两个部分转换为数字并相加。由于你的字符串不包含数字,两个字符串都被转换为0,因此结果是0。因此,你最终的SQL语句就是0。你可以使用print_r($query);来检查它。

编辑2:感谢Gerald Vesluis注意到ORDER BY子句开头缺少空格的问题。

0