mysqli_real_escape_string(),不添加反斜杠

时间:2013-03-15 14:08:12

标签: php

在向数据库输入数据时,我找不到mysqli_real_escape_string没有添加反斜杠的任何原因。我检查了手册,并说它是 mysqli_real_escape_string需要有2个参数。其他参数是您的数据库连接,当我检查数据库中的数据时,我发现单引号并且没有添加反斜杠。下面的代码可能有问题。我不知道如何使用准备好的陈述,请帮忙..!

function open_handler()
{
            // Connects to MYSQL
            $connect = new mysqli(HOST,USER,PASS,DB);

            // Logic Checks
            if($connect)
            {
                // MYSQL SET TO UTF8 ENCODING
                @mysqli_query('set names "utf-8"');
                @mysqli_query('set character set "utf8"');
                @mysqli_query('set character_set_server="utf8"');
                @mysqli_query('set collation_connection="utf8_general_ci"');
            }

            if(!$connect)
            {
                die('UNABLE TO CONNECTION TO MYSQL SERVER');
            }

            return $connect;    

        }

function add_user($uname,$pwd,$email)
    {
        $n_uname    = mysqli_real_escape_string(open_handler(),$uname);
        $n_pwd      = $pwd; 
        $n_email    = $email;       

        $sql  = sprintf("INSERT INTO `users` SET
                                             `uname`='%s', 
                                             `pwd`='%s', 
                                             `email`='%s',
                                              $n_uname,$n_pwd,$n_email);
        $query = mysqli_query(open_handler(),$sql);

        // logic check
        if(!$query)
            {return FALSE;}
        else
            {return TRUE;}
         @mysqli_free_result($query);   

    }

1 个答案:

答案 0 :(得分:4)

函数mysqli_real_escape_string()转义sql-breaking字符,例如单引号,但仅在数据库事务期间。换句话说,它不会永久修改您的数据以包含反斜杠。

这使您可以“安全地”插入/更新/查询数据库,而无需修改数据。

如果您需要以更“永久”的方式使用反斜杠转义数据,您可以使用addslashes(),然后当您想要删除它们时,您可以使用{{3 }}

mysqli_real_escape_string()的替代方案,请使用stripslashes()

$conn = open_handler();
$stmt = mysqli_prepare($conn, "INSERT INTO users (uname, pwd, email) VALUES (?, ?, ?);");
mysqli_stmt_bind_param($stmt, "s", $uname);
mysqli_stmt_bind_param($stmt, "s", $pwd);
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);