您的目前位置:主页>矩阵界>php>-文章内容页
PHP操作MYSQL数据库需避免保留字以免发生错误
时间:2011-10-15浏览量:
文章归类:

做程序员的或者学程序的都晓得 程序员语言都有保留字/保留英文单词,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
上一篇:PHPsetcookie()函数无法创建建立设置读取cookie值失效的解决办法方案 下一篇:没有了
共有 3 条评论,评论不能超过250字,需审核,请遵守相关政策法规。查看所有评论
匿名