PHP MySQL INSERT语句语法错误

时间:2012-01-09 09:44:42

标签: php mysql insert

我遇到INSERT语句问题,错误只说:

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 '' at line 1

根本没用。 到目前为止我尝试过的版本是失败的:

mysql_query("INSET INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')");

[不用说打印时的两个变量显示正确的值] 我也尝试了没有任何关于表名的版本,用'或',真的有一百万种组合,没有任何作用。甚至不是常量或不同的表。它不会插入任何东西。我已经检查了权限(我用root用户登录),并且全部打开了。

我在使用相同服务器(XAMPP 1.7.7)的两台不同机器上尝试了类似的东西,它可以工作。我完全不知所措!它能是什么?

感谢您的时间!

5 个答案:

答案 0 :(得分:4)

首先,只需正确输入INSERT

使用_GET之类的东西真正打开了SQL INJECTIONS ...

请查看MySQL prepared statements

还可以将良好做法命名为要插入数据的列。这允许您在后面插入额外列并保留应用程序逻辑。

INSERT INTO cos(rowName1, rowName2) VALUES(?, ?)

?将准备陈述。

答案 1 :(得分:2)

正确:

mysql_query("INSERT INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')");

您是否尝试将$ link传递给mysql_query

像:

mysql_query("INSERT INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')", $link);

编辑: 当然,在将任何内容插入数据库之前,您必须采取一些安全措施,可能是mysql_real_escape_string(),甚至是准备好的语句。

答案 2 :(得分:0)

你做错了。你为什么不逃避价值观? Php.net文档提供了一些好的和安全的工作示例:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends 
    WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));

// Perform Query
$result = mysql_query($query);

适应您的代码:

$query = sprintf("INSERT INTO `cos` VALUES (%s, %s);", 
        mysql_real_escape_string($_GET['prod']),
        mysql_real_escape_string($_GET['page']));
$result = mysql_query($query);

请永远逃避你的价值观。并使用INSERT,而不是INSET:)

答案 3 :(得分:0)

首先,您正在使用INSET使其与INSERT类似

$pro = mysql_real_escape_string($_GET['prod']);
$page = mysql_real_escape_string($_GET['page']);
mysql_query("INSERT INTO `cos` (column1, column2)
             VALUES ('$pro', '$page')" );

您忘记设置列名...

答案 4 :(得分:0)

试试这个:

$prod = $_GET['prod'];
$page = $_GET['page'];
mysql_insert("INSERT INTO 'cos' VALUES('$prod','$page)");

这应该很好:)