首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将序列化数据转义并插入到MySQL

将序列化数据转义并插入到MySQL
EN

Stack Overflow用户
提问于 2011-08-11 23:24:57
回答 5查看 7.8K关注 0票数 1

我有以下数据作为示例:

代码语言:javascript
复制
$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删除了\,现在我有了一个无效的序列化数据。

解决这个问题的最好方法是什么?谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-11 23:30:26

首先序列化您想要的值,然后使用使用mysql_real_escape_string。这毕竟是您要放入数据库中的字符串。尽量避免地址斜杠...

如果你现在不想有一个活动的连接,可以试试这个功能:

代码语言:javascript
复制
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; 

}

票数 2
EN

Stack Overflow用户

发布于 2011-08-11 23:30:54

为了将参数转义到一个SQL查询中,您不能使用addslashes,而是使用mysql_real_escape_string

示例:

代码语言:javascript
复制
<?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与预准备语句一起使用,这样您就完全不必转义了。

票数 6
EN

Stack Overflow用户

发布于 2011-08-11 23:31:36

使用mysql_real_escape_string函数!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7028556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档