无法插入数据库(steamauth)

时间:2015-09-15 11:00:30

标签: php mysql database quotes 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,但甚至无法连接。任何人都有想法在没有引号的情况下将steamname添加到我的数据库中?或接受它们为no-mysql?

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

1 个答案:

答案 0 :(得分:0)

因为您仍在使用mysql(您应该将其更改为mySQLI或PDO)

您可以使用mysql_real_escape_string()确保输入可以插入数据库。 (用一个新的变量来说明我是怎么做的)。

当您更改为PDO时,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";
}