检查用户是否已经存在
Check if user already exist
我第一次 post 在 Whosebug
如果 api 获得的 steamid 已经存在于 'steamID64' 列中,我想什么也不做。
但如果没有,请在同一列中插入新的 steamid
这是我编码的内容:
<?php
if(isset($_SESSION['steamid'])) {
include ('steamauth/userInfo.php'); //access steam informations
$ID64 = $steamprofile['steamid'];
$link = mysql_connect('xxx','xxx', 'xxx', 'xxx');
$query = "SELECT steamID64 FROM Users WHERE steamID64=".$ID64;
$result = mysql_query($query, $link);
$rowcount = mysql_num_rows($result);
if($rowcount == 0)
{
$newUser = "INSERT INTO Users SET steamID64='$ID64'";
mysql_query($newUser, $link);
mysql_free_result($result);
else
{
echo "User already exist"; //only for debug purpose
}
mysql_close($link);
}
?>
问题是他 运行 其他但我的用户 table 是空的
那我哪里错了? 0_o
我知道有人问过这个问题,但我已经尝试了所有我发现的问题
假设您的 table 只有一个字段,请将您的代码更改为:
$newUser = "INSERT INTO Users(steamID64) VALUES('".$ID64."')";
但是,我建议研究 PDO,因为它容易受到 SQL 注入攻击。
如有必要,请插入其他字段以及 steamID64。
您可以通过执行以下操作来尝试查看查询是否实际运行或抛出错误:
$query = "SELECT steamID64 FROM Users WHERE steamID64='".$ID64."'";
$result = mysql_query($query, $link) or die (mysql_error($link));
$rowcount = mysql_num_rows($result);
插入查询也有问题,应该是:
$newUser = "INSERT INTO Users (steamID64) VALUES ('".$ID64.'")";
无论如何,您应该尝试使用 PDO 或 Mysqli 准备语句来防止 SQL 注入,因为 mysql_
已被弃用且不安全。
更新
在使用 mysqli_
之前,请阅读 http://php.net/manual/en/book.mysqli.php
上的文档
无论如何,使用mysqli_
你的代码会变成这样:
$ID64 = $steamprofile['steamid'];
$link=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$_selectQuery="SELECT steamID64 FROM Users WHERE steamID64=?";
$_select=$link->prepare($_selectQuery);
$_select->bind_param('s',$ID64);
if($_select->execute()) {
$_select->store_result();
$rowcount=$_select->num_rows;
if($rowcount==0) {
$_select->free_result();
$_insertQuery="INSERT INTO Users (steamID64) VALUES (?)";
$_insert=$link->prepare($_insertQuery);
$_insert->bind_param('s',$ID64);
if($_insert->execute()) {
//NEW RECORD INSERTED
} else {
echo $link->error;
}
$_insert->free_result();
} else {
//DUPLICATE ENTRY
}
} else {
echo $link->error;
}
P.S。我正在使用面向对象 mysqli_
函数
mysqli->execute()
return如果语句成功则为 TRUE,否则它将 return FALSE,但是,无论如何,在 INSERT
、[=19 的情况下=] 或 DELETE
mysqli
对象还将包含一个 affected_rows
属性,表示受该语句影响的行数。
因此,即使 execute
有效,您也可以检查实际插入了多少行。
我第一次 post 在 Whosebug
如果 api 获得的 steamid 已经存在于 'steamID64' 列中,我想什么也不做。 但如果没有,请在同一列中插入新的 steamid
这是我编码的内容:
<?php
if(isset($_SESSION['steamid'])) {
include ('steamauth/userInfo.php'); //access steam informations
$ID64 = $steamprofile['steamid'];
$link = mysql_connect('xxx','xxx', 'xxx', 'xxx');
$query = "SELECT steamID64 FROM Users WHERE steamID64=".$ID64;
$result = mysql_query($query, $link);
$rowcount = mysql_num_rows($result);
if($rowcount == 0)
{
$newUser = "INSERT INTO Users SET steamID64='$ID64'";
mysql_query($newUser, $link);
mysql_free_result($result);
else
{
echo "User already exist"; //only for debug purpose
}
mysql_close($link);
}
?>
问题是他 运行 其他但我的用户 table 是空的 那我哪里错了? 0_o
我知道有人问过这个问题,但我已经尝试了所有我发现的问题
假设您的 table 只有一个字段,请将您的代码更改为:
$newUser = "INSERT INTO Users(steamID64) VALUES('".$ID64."')";
但是,我建议研究 PDO,因为它容易受到 SQL 注入攻击。
如有必要,请插入其他字段以及 steamID64。
您可以通过执行以下操作来尝试查看查询是否实际运行或抛出错误:
$query = "SELECT steamID64 FROM Users WHERE steamID64='".$ID64."'";
$result = mysql_query($query, $link) or die (mysql_error($link));
$rowcount = mysql_num_rows($result);
插入查询也有问题,应该是:
$newUser = "INSERT INTO Users (steamID64) VALUES ('".$ID64.'")";
无论如何,您应该尝试使用 PDO 或 Mysqli 准备语句来防止 SQL 注入,因为 mysql_
已被弃用且不安全。
更新
在使用 mysqli_
之前,请阅读 http://php.net/manual/en/book.mysqli.php
无论如何,使用mysqli_
你的代码会变成这样:
$ID64 = $steamprofile['steamid'];
$link=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$_selectQuery="SELECT steamID64 FROM Users WHERE steamID64=?";
$_select=$link->prepare($_selectQuery);
$_select->bind_param('s',$ID64);
if($_select->execute()) {
$_select->store_result();
$rowcount=$_select->num_rows;
if($rowcount==0) {
$_select->free_result();
$_insertQuery="INSERT INTO Users (steamID64) VALUES (?)";
$_insert=$link->prepare($_insertQuery);
$_insert->bind_param('s',$ID64);
if($_insert->execute()) {
//NEW RECORD INSERTED
} else {
echo $link->error;
}
$_insert->free_result();
} else {
//DUPLICATE ENTRY
}
} else {
echo $link->error;
}
P.S。我正在使用面向对象 mysqli_
函数
mysqli->execute()
return如果语句成功则为 TRUE,否则它将 return FALSE,但是,无论如何,在 INSERT
、[=19 的情况下=] 或 DELETE
mysqli
对象还将包含一个 affected_rows
属性,表示受该语句影响的行数。
因此,即使 execute
有效,您也可以检查实际插入了多少行。