2013-03-11 27 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