做程序员的或者学程序的都晓得 程序员语言都有保留字/保留英文单词,JS或者PHP也是如此,假如你在编写代码的时候使用一些敏感的保留字/保留词将导致程序发生一些莫名其妙的错误。最近笔者在为客户看看呗[kankanbei.com]做二次开发的时候在使用PHP向MYSQL数据库用insert语句添加新数据的时候发生一件莫名其妙的错误,那么这个PHP+MYSQL ERROR如何解决呢?详情如下:
按照项目开发需求,笔者需要开发一个对联广告管理系统,客户要求可以分别设置左侧对联广告和右侧对联广告是否显示。这个功能很简单,开发思路也很明确:我们决定用JS来实现对联部分,而在网站后台里加一个设置功能,把是否显示广告写入MYSQL数据库的某字段,然后页面中使用PHP来读取MYSQL中该字段的值从而输出对应的JS对联代码。
笔者在数据库中创建了一个表,负责存储广告是否显示的字段命名为show,然后就在测试添加广告功能的时候,MYSQL提示SQL语句出错了!
SQL语句为:INSERT INTO kkb_ads (adpic, adlink, show) VALUES ( 'kkb.jpg', 'http://kankanbei.com', 1)
MYSQL悲催地提示: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 'show) VALUES ( 'kkb.jpg', 'http://kankanbei.com', 1)' at line 1
这句MYSQL ERROR错误提示的英语语句翻译为中文就是:你有一个SQL语法错误,请根据你的MYSQL数据库版本的用户帮助手册来检查你的语法。
实在看不出这句SQL有什么错误,笔者手动在PHPMYADMIN中添加了一条数据,发现其SQL语句会在字段名加上``这种英文符号,而把这种符号去掉就会导致MYSQL报错!
真是百思不得其解,这个错误从未遇到过!最后经过网络搜索笔者发现SHOW是MYSQL的保留字词,不能用于建立表格或者字段中,于是将该字段改名为display,OK 错误就这样解决了!
现将MYSQL中的敏感保留字和词列表发布一下,以免大家出现和我一样的错误,你可以使用CTRL+F在本页查找你想找的MYSQL保留字单词。
在MySQL中,下表中的字显式被保留。看看呗[kankanbei.com]提醒您:其中大多数字进制被标准SQL用作列名和/或表名。少数被保留了,因为MySQL需要它们,(目前)使用yacc解析程序。保留字被引起来后可以用作识别符。
ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
ASENSITIVE
BEFORE
BETWEEN
BIGINT
BINARY
BLOB
BOTH
BY
CALL
CASCADE
CASE
CHANGE
CHAR
CHARACTER
CHECK
COLLATE
COLUMN
CONDITION
CONNECTION
CONSTRAINT
CONTINUE
CONVERT
CREATE
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURSOR
DATABASE
DATABASES
DAY_HOUR
DAY_MICROSECOND
DAY_MINUTE
DAY_SECOND
DEC
DECIMAL
DECLARE
DEFAULT
DELAYED
DELETE
DESC
DESCRIBE
DETERMINISTIC
DISTINCT
DISTINCTROW
DIV
MYSQL关键保留字词查询表 by 看看呗[kankanbei.com]
DOUBLE
DROP
DUAL
EACH
ELSE
ELSEIF
ENCLOSED
ESCAPED
EXISTS
EXIT
EXPLAIN
FALSE
FETCH
FLOAT
FLOAT4
FLOAT8
FOR
FORCE
FOREIGN
FROM
FULLTEXT
GOTO
GRANT
GROUP
HAVING
HIGH_PRIORITY
HOUR_MICROSECOND
HOUR_MINUTE
HOUR_SECOND
IF
IGNORE
IN
INDEX
INFILE
INNER
INOUT
INSENSITIVE
INSERT
INT
INT1
INT2
INT3
INT4
INT8
INTEGER
INTERVAL
INTO
IS
ITERATE
JOIN
KEY
KEYS
KILL
LABEL
LEADING
LEAVE
LEFT
LIKE
LIMIT
LINEAR
LINES
LOAD
LOCALTIME
LOCALTIMESTAMP
LOCK
LONG
LONGBLOB
LONGTEXT
LOOP
LOW_PRIORITY
MATCH
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT
MINUTE_MICROSECOND
MINUTE_SECOND
MOD
MODIFIES
NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL
NUMERIC
ON
OPTIMIZE
OPTION
OPTIONALLY
OR
ORDER
OUT
OUTER
OUTFILE
PRECISION
PRIMARY
PROCEDURE
PURGE
RAID0
RANGE
READ
READS
REAL
REFERENCES
REGEXP
RELEASE
RENAME
REPEAT
REPLACE
REQUIRE
RESTRICT
RETURN
REVOKE
RIGHT
RLIKE
SCHEMA
SCHEMAS
SECOND_MICROSECOND
SELECT
SENSITIVE
SEPARATOR
SET
SHOW
SMALLINT
SPATIAL
SPECIFIC
SQL
SQLEXCEPTION
SQLSTATE
SQLWARNING
SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT
SSL
STARTING
STRAIGHT_JOIN
TABLE
TERMINATED
THEN
TINYBLOB
TINYINT
TINYTEXT
TO
TRAILING
TRIGGER
TRUE
UNDO
UNION
UNIQUE
UNLOCK
UNSIGNED
UPDATE
USAGE
USE
USING
UTC_DATE
UTC_TIME
UTC_TIMESTAMP
VALUES
VARBINARY
VARCHAR
VARCHARACTER
VARYING
WHEN
WHERE
WHILE
WITH
WRITE
X509
XOR
YEAR_MONTH
ZEROFILL