Php 如何正确清理存储电子邮件的mssql查询
我有一个查询,它转到邮箱并尝试将所有电子邮件保存在一个表中。它在大多数情况下都有效,但当电子邮件内容值有双引号或单引号时,它会失败。如何修改代码以正确插入所有查询Php 如何正确清理存储电子邮件的mssql查询,php,sql-server,Php,Sql Server,我有一个查询,它转到邮箱并尝试将所有电子邮件保存在一个表中。它在大多数情况下都有效,但当电子邮件内容值有双引号或单引号时,它会失败。如何修改代码以正确插入所有查询 $num = imap_num_msg($imap); if($num > 0) { for($b = $num; $b > 0; $b--) { $body = $this->get_part($imap, $b, "TEXT/HTML
$num = imap_num_msg($imap);
if($num > 0)
{
for($b = $num; $b > 0; $b--)
{
$body = $this->get_part($imap, $b, "TEXT/HTML");
if($body == "")
{
$body = $this->get_part($imap, $b, "TEXT/PLAIN");
}
$header = imap_headerinfo($imap, $b);
$subject = $header->subject;
$fromaddress = $header->fromaddress;
$body = str_replace("'", "''", $body);
//$body = str_replace("\"", "\"\"", $body);
$sql3 = "INSERT INTO [tbl_test] (content)
VALUES ('".$body."')";
$result3 = mssql_query($sql3, $dbh1);
}
}
后记我得到了这些错误:
警告:mssql_query():消息:字符串“请调查以下s…的原因”后未闭合的引号
警告:mssql_query():常规SQL Server错误:检查第38行/var/www/testing.php中来自SQL Server(严重性15)的消息要使用参数:
$query = "INSERT INTO test (email, body) VALUES (?,?);";
$arrParams[]="my@domain.com";
$arrParams[]="My email body has quotes\'s or double quotes \" in it.";
$resource=sqlsrv_query($conn, $query, $arrParams);
来源:另外,这还可以防止SQL注入攻击!这实际上是我在阅读代码时的第一个想法,作为一个好处,它也回答了他的问题:)非常感谢,所以如果我这样做,我应该使用像addslashes这样的函数吗?还有,我如何为ubuntu安装这个新的扩展?我正在运行PHP版本5.3.10-1ubuntu3.5不知道,可能想在ServerFault上问这个问题。您永远不想编写这样的SQL命令:使用服务器安全控制之外未经检查的数据来生成并执行SQL命令。这就是SQL注入攻击的工作原理。虽然您可以通过数据清理来解决当前的“非恶意”问题,但世界上再多的卫生设施也无法使其100%安全地抵御恶意攻击。为此,您需要使用参数化(如Jason Carter的回答中所述),这也恰好解决了您当前的问题。同意,使用参数化查询/存储过程,这样您就不必担心单引号,也不必担心SQL注入(前提是您不只是在过程中构建动态SQL).我如何在Ubuntu上使用它?