【问题标题】:Can't insert into database (steamauth)无法插入数据库(steamauth)
【发布时间】:2015-12-11 14:34:56
【问题描述】:

我对用于网络的 Steam 身份验证器有疑问。如您所知,steam 提供了一个脚本,允许人们通过 steam 数据库连接到您的站点。我的问题是:只要有人的名字中有一个特殊的字符,比如简单的引号,它就会在我的数据库中添加一个空白名称......

这是来自 Steam 的代码:

if($openid->validate()) { 
            $id = $openid->identity;
            $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
            preg_match($ptn, $id, $matches);

            $_SESSION['steamid'] = $matches[1]; 
            $link = mysql_connect("localhost", "", "");
            $db_selected = mysql_select_db('', $link);
            $query = mysql_query("SELECT * FROM users WHERE steamid='".$_SESSION['steamid']."'");
            if (mysql_num_rows($query) == 0) {
                mysql_query("INSERT INTO users (steamid) VALUES ('".$_SESSION['steamid']."')") or die("MySQL ERROR: ".mysql_error());
            }
            if (isset($steamauth['loginpage'])) {
                header('Location: '.$steamauth['loginpage']);
            }
    } else {
            echo "User is not logged in.\n";
    }

我尝试将其移至 PDO,但甚至无法连接。任何人都有想法将蒸汽名称添加到我的数据库中而没有引号?还是接受它们为 no-mysql ?

我知道mysql中有一个函数,但它不再起作用了(mysql_real_escape_string)

【问题讨论】:

标签: php mysql database quotes steam


【解决方案1】:

因为你还在用mysql(应该改成mySQLI或者PDO)

您可以使用mysql_real_escape_string() 来确保输入可以插入到数据库中。 (使用一个新变量来展示我是如何做到的)。

当您更改为 PDO og mySQLI mysql_real_escape_string() 将无法工作,因为您现在没有活动的 mysql 连接。

重要的是mysql_real_escape_string()在mySQL连接之后

if($openid->validate()) { 
        $id = $openid->identity;
        $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
        preg_match($ptn, $id, $matches);

        $_SESSION['steamid'] = $matches[1];
        $link = mysql_connect("localhost", "", "");
        $db_selected = mysql_select_db('', $link);

        $steamId = mysql_real_escape_string ($matches[1]);

        $query = mysql_query("SELECT * FROM users WHERE steamid='".$steamId."'");
        if (mysql_num_rows($query) == 0) {
            mysql_query("INSERT INTO users (steamid) VALUES ('".$steamId."')") or die("MySQL ERROR: ".mysql_error());
        }
        if (isset($steamauth['loginpage'])) {
            header('Location: '.$steamauth['loginpage']);
        }
} else {
        echo "User is not logged in.\n";
}

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 2018-10-14
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多