當變量$ subject有單引號時,未插入此查詢。有沒有可能的解決方案?PHP變量包含單引號時未插入MySQL查詢
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
當變量$ subject有單引號時,未插入此查詢。有沒有可能的解決方案?PHP變量包含單引號時未插入MySQL查詢
mysql_query("INSERT INTO table (to_email_id,subject) values('$to','$subject');");
考慮使用參數化查詢,例如使用PDO。
或者,將變量括在括號{}中。
編輯:
我錯過了你的變量$subject
包含單引號。這意味着你必須逃避它們。 (關於這一點,請看無數的其他答案和mysql_real_escape_string()
。)但是,正如你所看到的,變量內部的單引號恰恰是注入攻擊的工作原理。轉義它們有助於防止此類問題,並允許查詢存儲預期數據。
如果沒有參考Bobby Tables,沒有關於注入攻擊的答案是完整的。
你需要在你的價值觀$to
和$subject
使用mysql_real_escape_string()
此外,如果你你是開放的SQL注入
讓您遠離參數之前並沒有這樣做。
$to = mysql_real_escape_string($to);
$subject = mysql_real_escape_string($subject);
mysql_query("INSERT INTO table (to_email_id, subject) values('$to', '$subject');");
另外,請閱讀SQL注入攻擊。
你的查詢有一個偉大的 「洞」 - > 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);
我希望這能幫到你。
您的查詢將返回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將它們解釋爲字符串而不是查詢字符串分隔符。
如果您正在使用
(所有書的都可以)爲$主題和你正嘗試插入到MySQL
使用本
$disc_str = addslashes($subject);
「INSERT INTO表名(視)值('$ disc_str')「;
我的作品在文本區域與TinyMCE的也
最好將代碼與代碼格式化 – Razib 2015-02-08 06:03:25
http://php.net/manual/en/function.mysql-real-escape-string.php – j08691 2012-02-13 18:18:24