MySQL UPDATE语法错误与变量

时间:2013-06-19 12:40:59

标签: php sql-update

长话短说,我正在尝试编写一个PHP代码,将文本文件解析为MySQL查询。除了包含UPDATE语句的查询之外,一切正常。

整个代码有点长,但如果你想看到它 - http://pastebin.com/xVR6ArD0

以下是有问题的部分:

while ($i<=$no_collumns)
           {
             $j = $i-1;
             if (!
                  mysql_query 
                  ("UPDATE ResultsPredmet 
                   SET ${parsed_collumns[$i]} = '${parsed_words[$j]}' 
                   WHERE ${parsed_first_collumn} LIKE '${parsed_first_word}'")
                ) 
              {echo mysql_error()."\n"; break;}
            // echo "\nUPDATE ResultsPredmet SET ${parsed_collumns[$i]} = '${parsed_words[$j]}' WHERE ${parsed_first_collumn} LIKE \"${parsed_first_word}\"";
         $i++;
         }

...其中$ parsed_collumns和$ parsed_words是字符串数组,$ parsed_first_collumn和$ parsed_first_word是字符串。

我尝试了变量的所有引号和转义组合。我尝试将它们放在双引号中并转义它们,或双引号并连接它们,然后我可能认为这是因为我通过'='运算符来比较字符串,所以我尝试了'LIKE'。我用谷歌搜索了几个小时,到处都有人说使用单引号作为变量,所以我也尝试了它,但它没有用。

最后,我回答了问题并得到了:

UPDATE ResultsPredmet SET grade = '10' WHERE name LIKE "Vildur"
UPDATE ResultsPredmet SET index = '117/2010' WHERE name LIKE "Vildur"
Updating table. 
UPDATE ResultsPredmet SET grade = '6' WHERE name LIKE "NinoDoko"
UPDATE ResultsPredmet SET index = '132/2011' WHERE name LIKE "NinoDoko"
Updating table. 
UPDATE ResultsPredmet SET grade = '10' WHERE name LIKE "Koco"
UPDATE ResultsPredmet SET index = '130/2011' WHERE name LIKE "Koco"
Done. 

这对我来说似乎相当不错。我得到的其他查询只与周围有单引号的名称相同,或者没有引号或任何其他组合。

我得到的错误是:

Updating table. 
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '117/2010' WHERE name LIKE 'Vildur'' at line 1
Updating table. 
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '132/2011' WHERE name LIKE 'NinoDoko'' at line 1
Updating table. 
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'index = '130/2011' WHERE name LIKE 'Koco'' at line 1

显然,我正在使用的服务器是MariaDB 5.5,但经过一些研究后我发现它与通用MySQL类似,但我可能完全关闭了。 “更新表”。在我的代码中只是一个随机回声。我也尝试了查询而没有缩进它,仍然有同样的错误。我为gradeindex获取的值是字符串 - 或者至少我希望如此,因为我使用explode()获取它们。

1 个答案:

答案 0 :(得分:1)

索引是保留字

UPDATE ResultsPredmet SET `index` = '10' WHERE name LIKE 'Vildur'

http://dev.mysql.com/doc/refman/4.1/en/reserved-words.html