所以我有一个名为key的主键列。我试图通过以下代码选择key = 1的行:
$query ="SELECT * FROM Bowlers WHERE key = '1'";
$result = mysql_query($query) or die(mysql_error());
出于某种原因,我得到了这个结果:
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行的'key ='1''附近使用正确的语法
mysql语句适用于使用其他键,即WHERE name ='djs22'。
有什么想法吗?
答案 0 :(得分:7)
键是一个保留字,试着在它周围加上滴答声:
$query ="SELECT * FROM `Bowlers` WHERE `key` = '1'";
$result = mysql_query($query) or die(mysql_error());
要查看所有保留字,请转到此处向下滚动: http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html
答案 1 :(得分:2)
'key'是一个保留的关键字,在它周围加上反引号:
"SELECT * FROM Bowlers WHERE `key` = '1'"
答案 2 :(得分:2)
不检查,“key”可能是MySQL中的保留字。 尝试用反引号包装它
$query ="SELECT * FROM Bowlers WHERE `key` = '1'";
答案 3 :(得分:1)
您应该在引号
中写下列名称键$query ="SELECT * FROM Bowlers WHERE `key` = '1'";
否则它是关键字
答案 4 :(得分:0)
我一直都遇到这种情况。 MySQL有一堆保留字。当你遇到一个时,mysql错误函数甚至不足以让你知道出了什么问题。
您唯一能做的就是更改列名称。前几天我意外地使用了“约会,往返”。 DuHH !!!当我恍然大悟的时候把头发拉了出去!那些是DB保留。
您可以在其周围包装所有类型的引号,它引用列名称时无关紧要。保留是保留的!
通常的做法是做一些事情。
1)制作表格时:使用下划线拆分资源名称的资源类型。示例:xref_userMessages
This would mean it is a cross reference table for User messages.
2)表名的其他示例:
msg_Messages | sys_Settings | cli_Logins因此,与消息相关的任何其他表都将被称为msg _ ??? ,这不仅可以使它们在phpMyadmin中组合在一起,而且还可以更容易地记住这些名称。
3)制作列时:切勿使用保留。因此,使关键列始终为6个小部件。示例:
admkey | usrkey | msgkey | clikey grpkey
Obviously Admin Key | User Key | Message Key | Client Key | Group Key
所以这意味着“msg_Messages”键是“msgkey”,xref表是xref_Messages,其键是xref_msgkey。遵循这个逻辑,你不仅知道如何命名所有内容而不考虑它,但你从来没有遇到任何保留的话。
4)列名称示例:
dateInsert dateStart timeCreate admName admAddress admPhone admCell
就像上面一样,它有一个逻辑。将目的/所有者和名词/项目放在一起会产生名称,并再次避免使用保留字。
最后一个例子:
表:users_Admins users_Clients 关键:admkey usrkey
表:msg_Messages 列:msgkey admkey usrkey msgRead msgMessage msgTitle
就在这个简短的例子中,我避免了2个保留字。关键和阅读
简而言之,您的问题不在于读取主键。这是列名称的问题。 MySQL将您的代码视为具有不合适命令的语法。 SELECT read ...或SELECT键...如果你在它周围加上引号并不重要。 MySQL基本上看到......
SELECT (SELECT,WHERE,FROM) FROM select,from,where WHERE SELECT = WHERE & FROM = SELECT. hehehehehehehe
在此处添加不同类型的引用不会改变您刚刚发送给MySQL的混淆程度。
将我的错误和你的错误混合起来就像这样......
SELECT key,from,to,date FROM my_table WHERE key='1'; // Same as... SELECT SELECT,SELECT,SELECT,SELECT FROM my_table WHERE SELECT='1';
第一个你无法通过观察它真正告诉它有什么不对。第二个显然是不对的,也不行。但是,根据MySQL,它们是相同的。
MySQL接收这种语法就是这样...... SELECT?你告诉我SELECT 5次,从来没有告诉我甚至选择什么。你得到了正确的FROM,然后你用一个左钩子告诉你选择别的东西,你不仅没有告诉我再次选择什么,而是你扔了一个NULL ='1';到底是怎么回事? 这就是为什么当你犯这些错误时,错误函数甚至不会报告发生了什么。有这么多的错误,它不会给你一个错误号码,所以它只是停止。
So this means your syntax is like this SELECT * FROM Bowlers WHERE SELECT = '1';
有时我会感到沮丧并说:“我希望MySQL比这更聪明!!!”但后来我意识到我必须将关键词换成一个价值较低的数据库。这些保留字中的每一个代表一个单词,它在我的数据库方面做了很多工作。当我第一次开始学习编程时,我必须编写自己的文本输入字段子例程,所以我很欣赏MySQL为我做的所有简洁的事情。