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()
]给我上面的结果,我该如何防止它发生?
答案 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()
。