我第一次在stackoverflow上发帖
我想如果通过api获得的steamid已经存在于'steamID64'列中,则什么都不做。 但如果没有,请在同一列中插入新的蒸汽喷射器
这里我编码的是:
<?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);
}
?>
问题是他运行了else,但我的Users表是空的 那我哪里错了? 0_o
我知道这个问题已经被问到,但我已经尝试了所有我发现的问题
答案 0 :(得分:1)
您可以尝试查看查询是否实际运行或通过执行此操作引发错误:
$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()
返回TRUE,否则返回FALSE,但是,如果INSERT
,UPDATE
或DELETE
mysqli
对象还将包含affected_rows
属性,该属性表示受语句影响的行数
因此,即使execute
有效,您也可以检查实际插入的行数。
答案 1 :(得分:0)
假设您的表只有一个字段,请将代码更改为:
$newUser = "INSERT INTO Users(steamID64) VALUES('".$ID64."')";
但是,我建议调查PDO,因为这对SQL注入攻击是开放的。
如有必要,请插入其他字段以及steamID64。