如何将HTML代码更新为MySQL字段

时间:2013-04-04 05:40:24

标签: php mysql xml

PHP版本:5.3.19 MYSQL版本:5.0.96

我有一个数据库表,其中包含一个包含xml数据的字段:

XML DATA:

<?xml version="1.0"?>
    <book>
        <page>
            <data>Page 1</data>
        </page>
        <page>
            <data>Page 2</data>
        </page>
        <page>
            <data>Page 3</data>
        </page>
    </book>

我已经成功显示了xml数据,现在我正在尝试用php更新它

PHP代码:

$id = 1;
    $fav_id = $id;
    $userid = 1;
    $data_update = '<p style="text-align: center;"><span style="text-decoration: underline; font-size: xx-large;"><em><strong>Title</strong></em></span></p>';
    $page_number = 0;

    mysql_select_db($database_main, $main);
    $query_Recordset1 = "SELECT * FROM projects WHERE id = $id";
    $Recordset1 = mysql_query($query_Recordset1, $main) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);

    $xmldata = (string)$row_Recordset1['projectData'];
    $parsed = simplexml_load_string($xmldata);
    $data = $parsed->xpath('//data');
        $data[$page_number] = $data_update;

    $x = 0;
    $array_length = count($data);
    while($x < $array_length){
            if($x==0){
                $finalData .= '<?xml version="1.0"?><book>';
            }
            $finalData .= "<page><data>$data[$x]</data></page>";
            if($x==$array_length-1){
                $finalData .= "</book>";    
            }
            $x++;

    }
    $FinalData = mysql_real_escape_string($finalData);
        $updateSQL = "UPDATE projects SET projectData=$finalData  WHERE id=$fav_id";
        mysql_select_db($database_main, $main);
    $Result1 = mysql_query($updateSQL, $main) or die(mysql_error());

我希望最终结果是:

<?xml version="1.0"?>
    <book>
        <page>
            <data>
                <p style="text-align: center;">
                    <span style="text-decoration: underline; font-size: xx-large;">
                        <em><strong>Title</strong></em>
                    </span>
                </p>
            </data>
        </page>
        <page>
            <data>Page 2</data>
        </page>
        <page>
            <data>Page 3</data>
        </page>
    </book>

虽然当我尝试addslashes()mysql_real_escape_string()时,我得到了:

DATA:

<p center;\\\"="" style="\\\"text-align:">
    <span xx-large;\\\"="" font-size:="" underline;="" style="\\\"text-decoration:">
        <em>
            <strong>Title</strong>
        </em>
    </span>
</p>

我的问题是为什么这两个函数[addslashes()mysql_real_escape_string()]给我上面的结果,我该如何防止它发生?

2 个答案:

答案 0 :(得分:0)

mysql_real_escape_string VS addslashes 我希望这能给你回答addslashes()和mysql_real_escape_string()..我不能发表评论..我知道这不是你问题的完整答案。这可以清除您对使用情况的疑虑。 addslashes是每个需要“\”的字符的GENERIC函数,而mysql_real_escape_string是特定于MySQL的!

答案 1 :(得分:0)

函数mysql_real_escape_string()addslashes()几乎完全相同,mysql_real_escape_string()添加了一些额外的内容。

mysql_real_escape_string()上的php.net

  

mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,该函数将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a。

add_slashes()上的php.net

  

在数据库查询等中需要引用的字符之前返回带反斜杠的字符串。这些字符是单引号('),双引号(“),反斜杠(\)和NUL(NULL字节)。

要阻止这种情况发生,您无能为力,只需在输出字段时使用stripslashes()