长话短说,我正在尝试编写一个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类似,但我可能完全关闭了。 “更新表”。在我的代码中只是一个随机回声。我也尝试了查询而没有缩进它,仍然有同样的错误。我为grade
和index
获取的值是字符串 - 或者至少我希望如此,因为我使用explode()
获取它们。
答案 0 :(得分:1)
索引是保留字
UPDATE ResultsPredmet SET `index` = '10' WHERE name LIKE 'Vildur'