簡體   English   中英

MySQL PHP 變量包含單引號時未插入查詢

[英]MySQL Query not inserted when PHP variable contains single quotes

當變量 $subject 具有單引號時,不會插入此查詢。 有沒有可能的解決方案?

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

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

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

編輯:

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

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

轉義您的參數。

$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注入攻擊的信息

您的查詢將返回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');

如果您看一下值中的第二個項目,它曾經是$ subject,那么您會注意到現在撇號的數量是不均勻的,這意味着查詢的結尾');。 是一個開放的字符串。

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

快速說明:在諸如“和'(\\”,\\')之類的字符上添加斜杠。 告訴mysql將它們解釋為字符串字符,而不是查詢字符串定界符。

您需要在$to$subject值上使用mysql_real_escape_string()

另外,如果您在進行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);

我希望這能幫到您。

如果您正在使用

(所有書籍都可用)作為$ subject,並且您嘗試插入mysql

用這個

$disc_str = addslashes($subject);

“插入表名稱(主題)值('$ disc_str')”;

它也與tinymce在Textarea中對我有效

解決方法很簡單。 在將數據存儲到 php 變量之前,只需添加以下方法

$connection = mysqli_connect($host,$dbuser,$dbpass,$dbname);
$to= mysqli_real_escape_string($connection, $old_email);
$subject= mysqli_real_escape_string($connection, $old_subject)


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM