将$ variable或$ _POST值插入mysql表

时间:2012-03-08 12:55:03

标签: php mysql

我的问题是关于为什么一段代码有效,另外两段没有,以及我如何获得无法正常工作的代码。

有效的代码:

mysql_select_db("webuser1", $con);

mysql_query("INSERT INTO users (column 1, column2) VALUES ('value1', 'value2')");

mysql_close($con);

没有的代码no1($ var1包含'value1'等):

mysql_select_db("webuser1", $con);

mysql_query("INSERT INTO users (column 1, column2) VALUES ($var1, $var2)");

mysql_close($con);

代码no2不起作用($ _POST ['value1']包含'value1'等。):

mysql_select_db("webuser1", $con);

mysql_query("INSERT INTO users (column 1, column2) VALUES ($_POST['value1'], $_POST['value2'])");

mysql_close($con);

我不应该能够在mysql中插入$ var或$ _POST吗?我希望你没有发现这个Q傻,但我一直在寻找解决方案,但我还没有理解它们。 谢谢

9 个答案:

答案 0 :(得分:7)

在SQL中,需要引用字符串值:

VALUES ('value1', 'value2')"

使用变量时:

VALUES ($var1, $var2)");

他们没有被引用......除非引号在值本身中。

所以如果$var1 = 'value1'; $var2 = 'value2'那么(在你的字符串中插入变量之后)你的SQL看起来像这样:

VALUES (value1, value2)"

您可以通过添加引号来解决您的问题:

VALUES ('$var1', '$var2')");

但这不会修复您的主要安全漏洞,并会让您的数据以不同方式破解查询。

您应该通过汇总变量中的字符串来避免创建SQL语句。这种方式导致SQL注入安全漏洞。使用支持bound arguments的界面。他们会为您处理报价和逃避。

答案 1 :(得分:3)

mysql需要单引号来包含一个字符串......所以你需要这样的东西:

mysql_query("INSERT INTO users (column 1, column2) VALUES ('".$_POST['value1']."', '".$_POST['value2']."')");

对于不是字符串的所有内容,您不需要单引号(')

如前所述,您不应忘记转义要放入数据库的字符串。 例如,使用准备好的陈述。通过绑定参数,可以确保传递的值是您在预准备语句中指定的类型。

答案 2 :(得分:2)

有一件事你必须明白:
不能将$ variable或$ _POST值插入mysql表。

您只能将它们插入另一个PHP变量中。

哪个变量(如果碰巧是有效的SQL查询)可以发送到mysql,这将在表中添加相应的值。

因此,您必须首先学习正确的PHP字符串语法。

因此,PHP允许您以3种不同的方式将关联数组成员添加到字符串中:

$array['key'] = 'world';
$str = "Hello ".$array['key'];
$str = "Hello {$array['key']}";
$str = "Hello $array[key]";

您还遇到SQL语法问题 SQL查询中的字符串必须进行转义和引用。你的代码都没有。

答案 3 :(得分:0)

好像你没有正确地转义和引用mysql的参数。

要在MySQL中插入变量,您至少需要转义它们:$var = mysql_real_escape_string($_POST['variable'])然后".. VALUES ('".$var."')"

你也应该考虑使用库来连接MySQL,例如DOCTRINEhttp://www.doctrine-project.org/来处理这个问题。

答案 4 :(得分:0)

$var1=$_POST['variable_name1'];
$var2=$_POST['variable_name2'];
$q="INSERT INTO `users` (`column 1`, `column2`) VALUES ($var1, $var2)";

$result=mysql_query($q);

答案 5 :(得分:0)

使用此解决方案,其100%正常工作

mysql_query("INSERT INTO users (column 1, column2) VALUES ('{$_POST[value1]}', '{$_POST[value2]}')");

当你使用{}时,你不需要在''

中写入值

答案 6 :(得分:-1)

您的变量不会被识别为变量。它们是你的一部分。

尝试:

mysql_query("INSERT INTO users (column 1, column2) VALUES ('".$var1."', '".$var2."')");

第二个问题也是如此。

答案 7 :(得分:-1)

因为POST变量中包含',所以你必须连接。

mysql_query("INSERT INTO users (column 1, column2) VALUES (".$_POST['value1'].", ".$_POST['value2'].")");

或者

mysql_query("INSERT INTO users (column 1, column2) VALUES ({$_POST['value1']}, {$_POST['value2']})");

在变量周围加上引号也是个好主意,以防它是空的(或字符串而不是整数)

答案 8 :(得分:-1)

mysql_select_db("webuser1", $con);

mysql_query("INSERT INTO users (column 1, column2) VALUES ('$var1', '$var2')");

mysql_close($con);

当不在值周围使用Apostrophes时,它应该是非字符串值。