我的网络蒸汽验证器有问题。如您所知,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)
答案 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";
}