我有以下数据作为示例:
$a = addslashes('hello\'s');
$b = serialize($a);
// As you know, $b looks like this s:8:"hello\'s";现在,当我将$b插入到MySQL中时,数据现在看起来像这样:8: MySQL中的“hello‘s”。MySQL删除了\,现在我有了一个无效的序列化数据。
解决这个问题的最好方法是什么?谢谢
发布于 2011-08-11 23:30:26
首先序列化您想要的值,然后使用使用mysql_real_escape_string。这毕竟是您要放入数据库中的字符串。尽量避免地址斜杠...
如果你现在不想有一个活动的连接,可以试试这个功能:
function mysql_escape_no_conn( $input ) {
if( is_array( $input ) ) {
return array_map( __METHOD__, $input );
}
if( !empty( $input ) && is_string( $input ) ) {
return str_replace( array( '\\', "\0", "\n", "\r", "'", '"', "\x1a" ),
array( '\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z' ),
$input );
}
return $input; }
发布于 2011-08-11 23:30:54
为了将参数转义到一个SQL查询中,您不能使用addslashes,而是使用mysql_real_escape_string。
示例:
<?php
$param = mysql_real_escape_string($_GET['param']);
$query = "SELECT f1, f2 FROM atable WHERE f3 = '$param' ";
// these single quotes here are essential !! ^ ^
// if you leave out the quotes you **will** suffer SQL-injection.这是转义SQL参数的正确方法。
或者更好地将PDO与预准备语句一起使用,这样您就完全不必转义了。
发布于 2011-08-11 23:31:36
使用mysql_real_escape_string函数!
https://stackoverflow.com/questions/7028556
复制相似问题