2017-08-01 34 views
-1

我一直在使用PHP构建一个带有PHP & MySQL的系统。到目前为止,一切都很好,但现在当我从文本字段中保存数据时,它已经开始添加转义字符。例如,试图挽救该字符串mysqli_real_escape_string - 似乎已停止工作

这是很好的

保存为

它\好

我使用的插入查询

$query = "INSERT INTO jobs(customerId, 
jobDateReceived, 
jobReceivedBy, 
jobPONo, 
jobCompletionDate, 
jobPrice, 
jobIncExVat, 
jobPriceEstimate, 
jobZeroPrice, 
jobDescription, 
jobEngraving, 
jobEngraveComplete, 
jobLaser, 
jobLaserComplete, 
jobWood, 
jobWoodComplete, 
jobQualityControl) 
VALUES('".$_SESSION['customerId']."', '" 
.$_POST['recDateField']."', '" 
.$_POST['recByField']."', '" 
.$_POST['purchOrderField']."', '" 
.$_POST['completionDateField']."', '" 
.$_POST['priceField']."', '" 
.$_POST['vatRadios']."', '" 
.$estimateYN."', '" 
.$zeroPriceYN."', '" 
.mysqli_real_escape_string($link, $_POST['descriptionField'])."', '" 
.$engravingYN."', 'N', '" 
.$laserYN."', 'N', '" 
.$woodYN."', 'N', 'I')"; 

任何人都可以帮助为什么这可能已停止工作?

+0

你检查你的系统,以确保mysqli的PHP扩展是否正确装入? – Difster

+1

您的脚本存在[SQL注入攻击]的风险(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 即使[如果您正在转义输入,它不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) 使用[编写的参数化语句](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+4

如何停止使用转义并使用预处理语句? –

回答

0

1)建议使用准备好的语句:使用带绑定参数一份声明中允许撇号

2)使用这些函数保存到数据库中,他们将保留撇号之前存储你的数据。

使用htmlentities($yourdata, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8')将特殊字符转换为html实体。

使用htmlspecialchars() OR

使用addslashes()逃逸的特殊字符用反斜杠