So I came across an odd situation today.
I have a system that creates memory tables using the PHP $_COOKIE['PHPSESSID'] value.
Once some work is done it then drops the table.
Two sample tables are below for my example .
Now some simple processing occurs on the real tables I used then like I said I dropped them.
Simple enough until I ran across this..
Now the fix is actually very simple. But the question is why does one work and one fail?
To fix this just backtick the table name. Which I should have done from the start anyway. That is just a good practice to get into.
Now I first thought that maybe the issue was Alpha-numeric name but we can see that one version works. The difference though is the start of the table name. One is an integer and one is a Alpha character. So again .. follow best practices and quote table names to avoid such stupid mistakes.
After all the error code is a parse error..
I have a system that creates memory tables using the PHP $_COOKIE['PHPSESSID'] value.
Once some work is done it then drops the table.
Two sample tables are below for my example .
@@VERSION: 5.6.19-log
CREATE TABLE `f7a7a8d3a7ba75b5eb1712864c9b27eb` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MEMORY;
CREATE TABLE `8865e52c7e1bea515e7156f240729275` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MEMORY;
Now some simple processing occurs on the real tables I used then like I said I dropped them.
DROP TABLE IF EXISTS f7a7a8d3a7ba75b5eb1712864c9b27eb;
Query OK, 0 rows affected (0.09 sec)
Simple enough until I ran across this..
desc 8865e52c7e1bea515e7156f240729275;
ERROR 1064 (42000): 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 '8865e52c7e1bea515e7156f240729275' at line 1
DROP TABLE IF EXISTS 8865e52c7e1bea515e7156f240729275;
ERROR 1064 (42000): 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 '8865e52c7e1bea515e7156f240729275' at line 1
Now the fix is actually very simple. But the question is why does one work and one fail?
To fix this just backtick the table name. Which I should have done from the start anyway. That is just a good practice to get into.
DROP TABLE IF EXISTS `8865e52c7e1bea515e7156f240729275`;
Query OK, 0 rows affected (0.02 sec)
Now I first thought that maybe the issue was Alpha-numeric name but we can see that one version works. The difference though is the start of the table name. One is an integer and one is a Alpha character. So again .. follow best practices and quote table names to avoid such stupid mistakes.
After all the error code is a parse error..
perror 1064
MySQL error code 1064 (ER_PARSE_ERROR): %s near '%-.80s' at line %d
No comments:
Post a Comment
@AnotherMySQLDBA