2012-02-13 107 views
-2

當變量$ subject有單引號時,未插入此查詢。有沒有可能的解決方案?PHP變量包含單引號時未插入MySQL查詢

mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');"); 
+4

http://php.net/manual/en/function.mysql-real-escape-string.php – j08691 2012-02-13 18:18:24

回答

7

考慮使用參數化查詢,例如使用PDO

或者,將變量括在括號{}中。

編輯:

我錯過了你的變量$subject包含單引號。這意味着你必須逃避它們。 (關於這一點,請看無數的其他答案和mysql_real_escape_string()。)但是,正如你所看到的,變量內部的單引號恰恰是注入攻擊的工作原理。轉義它們有助於防止此類問題,並允許查詢存儲預期數據。

如果沒有參考Bobby Tables,沒有關於注入攻擊的答案是完整的。

+0

+1。這是最好的解決方案,雖然不是OP的問題的直接答案 – 2012-02-13 18:34:25

+0

編輯澄清一點。括號不能解決問題,但我原本以爲OP有另一個問題。 :) – JYelton 2012-02-13 18:39:53

+0

+1對於鮑比表:) – iblue 2012-02-13 18:43:21

2

你需要在你的價值觀$to$subject

使用mysql_real_escape_string()此外,如果你你是開放的SQL注入

3

讓您遠離參數之前並沒有這樣做。

$to = mysql_real_escape_string($to); 
$subject = mysql_real_escape_string($subject); 
mysql_query("INSERT INTO table (to_email_id, subject) values('$to', '$subject');"); 

手冊:mysql_real_escape_string()

另外,請閱讀SQL注入攻擊

+0

我需要單引號應插入表中。 例如:我會打電話回家 – logan 2012-02-13 18:36:36

+0

如果您正確地將它們轉義出來,單引號將被插入到表格中。 – iblue 2012-02-13 18:42:48

+0

對於換行符,它將替換爲\ R \ N,並且在寫入表格時 - > RN – logan 2012-02-13 18:57:35

1

你的查詢有一個偉大的 「洞」 - > SQL注入。你應該在這裏閱讀更多關於這個:http://en.wikipedia.org/wiki/SQL_injection也在這裏http://php.net/manual/en/function.mysql-real-escape-string.php

要做個簡短的回答,你必須「傳遞」傳遞給mysql的值。最好的方法是使用mysql_real_escape_string函數。

$query = sprintf("mysql_query("INSERT INTO table (to_email_id,subject) values('%s', '%s');", mysql_real_escape_string($to),mysql_real_escape_string($subject)); 
mysql_query($query); 

我希望這能幫到你。

3

您的查詢將返回1064錯誤,這是您的查詢中的語法錯誤。發生這種情況是因爲變量,特別是問題中的$ subject,正在改變封閉字符串的格式。例如,假設我們有

$subject = "fire's hotter than it looks"; 

當這個在您的查詢評估您的查詢字符串將

INSERT INTO table (to_email_id,subject) 
    VALUES('the value of the to variable','fire's hotter than it looks'); 

如果你看一下第二項中的值,它曾經是$主題,你會注意到你現在有一個不平衡的撇號數,這意味着你的查詢結束');是一個開放的字符串。

如上所述,使用諸如mysql_real_escape_string()之類的函數來添加缺少的斜線。

快速提示:在「and」(\「,\')等字符中添加斜槓。告訴mysql將它們解釋爲字符串而不是查詢字符串分隔符。

0

如果您正在使用

(所有書的都可以)爲$主題和你正嘗試插入到MySQL

使用本

$disc_str = addslashes($subject); 

「INSERT INTO表名(視)值('$ disc_str')「;

我的作品在文本區域與TinyMCE的也

+0

最好將代碼與代碼格式化 – Razib 2015-02-08 06:03:25

相關問題