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上使用它?