检查用户是否已存在

时间:2015-03-04 10:13:24

标签: mysql steam

我第一次在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

我知道这个问题已经被问到,但我已经尝试了所有我发现的问题

2 个答案:

答案 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,但是,如果INSERTUPDATEDELETE mysqli对象还将包含affected_rows属性,该属性表示受语句影响的行数 因此,即使execute有效,您也可以检查实际插入的行数。

答案 1 :(得分:0)

假设您的表只有一个字段,请将代码更改为:

$newUser = "INSERT INTO Users(steamID64) VALUES('".$ID64."')";

但是,我建议调查PDO,因为这对SQL注入攻击是开放的。

如有必要,请插入其他字段以及steamID64。