2013-03-11 34 views
0

这很简单,但我似乎无法找到我正在寻找的答案。插入变量在PHP数据库查询

这完美的作品:

mysql_query("INSERT INTO Courses (CourseName) values ('MyValue')"); 

但是,这并不工作:

mysql_query("INSERT INTO Courses (CourseName) values ('" + $_POST['course'] + "')"); 

我测试,我知道$_POST['course']包含MyValue
我甚至可以在php中使用这种语法吗?

在我的情况下,Sql注入不是问题。而不是+

mysql_query("INSERT INTO Courses (CourseName) values ('" . mysql_real_escape_string($_POST['course']) . "')"); 
+2

使用'。'不是'+'它的PHP不是JavaScript – Waygood 2013-03-11 17:09:47

+1

Mysql_ *已被弃用。这很容易SQL注入... – ppeterka 2013-03-11 17:10:04

+0

'mysql_query(“INSERT INTO Courses(CourseName)values('”。$ _ POST ['course']。'')“);' – 2013-03-11 17:10:18

回答

0

使用.使用。连接字符串

mysql_query("INSERT INTO Courses (CourseName) values ('".mysql_real_escape_string($_POST['course'])."')"); 

还可以使用mysql_real_escape_string防止任何错误,就像它在一个单引号奥尼尔。

+1

这是易受SQL注入http://php.net/manual/ en/security.database.sql-injection.php – 2013-03-11 17:11:47

+0

@Pekka웃你是对的,但我只是想清除使用'.'而不是'+' – 2013-03-11 17:12:51

+0

在我的情况下,SQL注入并不是一个问题。我知道这件事,这与问题无关。 – phadaphunk 2013-03-11 17:14:38

0

1)使用mysqli,而不是mysql,因为它已被弃用。

2)始终逃脱从您的网站传来的变量,与mysql_real_escape字符串,如果仍然使用mysql ...

3)调试代码。在你的例子中最快的只是使用:

 mysql_query("... your sql string ") or die(mysql_error()) 

比你看到的错误。 (但是当你的脚本启用时,注释掉所有“或者死掉(mysql_error())+代码,所以其他人看不到错误,并且破解你的站点(这么容易))

4)。is the concatenation在PHP中的字符串,而不是+

+0

你是对的,我纠正了点2. 我写道,因为我观察到只有几个php程序员想要替换mysql,到mysqli ...并且少于更少要使用objectum方向代码..或知道oop ... 但我知道mysqli,可以作为一个函数库..但你的权利。 – Kovge 2013-03-11 17:19:25

0
mysql_query("INSERT INTO Courses (CourseName) values ('" + $_POST['course'] + "')"); 

您使用的是PHP不支持字符串连接的方法。它支持其他语言。可以有多种选择,以建立您的字符串。

期权1:用.替换+

mysql_query("INSERT INTO Courses (CourseName) values ('".$_POST['course']."')"); 

选项2:没有中断

mysql_query("INSERT INTO Courses (CourseName) values ('{$_POST['course']}')"); 

语言之间正在进行的时候,尤其是在这种情况下“PHP字符串连接”的搜索您应该基本读了会给你你所需要的。

另请参见:不要使用MySQL_ *,因为它已从PHP 5.5开始被弃用。使用MySQLi_ *或PDO