用于检查MySQL数据库中是否已存在用户的PHP脚本

用于检查MySQL数据库中是否已存在用户的PHP脚本,php,mysql,database,facebook,post,Php,Mysql,Database,Facebook,Post,我正在为Facebook创建一个简单的游戏。所有使用该应用程序的用户都会写入数据库。我需要经常检查用户是否已经存在于数据库中,如何正确地做到这一点 所以我有变量$name=$user_profile['name']它成功返回用户名 这是我用来检查数据库中是否已经存在用户的部分代码 $user_profile = $facebook->api('/me'); $name = $user_profile['name']; $mysqli = new mysqli("host","

我正在为Facebook创建一个简单的游戏。所有使用该应用程序的用户都会写入数据库。我需要经常检查用户是否已经存在于数据库中,如何正确地做到这一点

所以我有变量
$name=$user_profile['name']它成功返回用户名

这是我用来检查数据库中是否已经存在用户的部分代码

$user_profile = $facebook->api('/me');
$name = $user_profile['name'];

      $mysqli = new mysqli("host","asd","pw","asdf");
                   echo "1";
               $sql = "SELECT COUNT(*) AS num FROM myTable WHERE userName = ?";
                   echo "2";
                if ($stmt = $mysqli->prepare($sql)) {
                   echo "3";
                $stmt->bind_param('s', $name);
                   echo "4";
                $stmt->execute();
                   echo "5";
                $results = $stmt->get_result();
                   echo "6";
                $data = mysqli_fetch_assoc($results);
                   echo "7";
                }
           if($data['num'] != 0)
            {
                    echo "bad";
                    print "user already exists\n";
            } else {
                    echo "good";    
                    $apiResponse = $facebook->api('/me/feed', 'POST', $post_data);
                    print "No user in database\n";
            }
    }
此代码不起作用,若数据库中不存在用户,则应在用户墙上发布数据。我花了很多时间去寻找原因,但没有成功。调试后,它不会显示任何错误。为了在我使用的每一行之后找出哪一行是不正确的
echo“number”
,现在我知道哪一行是不正确的。它打印
12345
和stuck。(代码下面的所有内容都没有加载。)这意味着这一行
$results=$stmt->get_result()不正确。但我误解了这句话有什么不对

如果我对这行注释所有代码加载(然后在数据库中打印
1234567无用户!
并在用户的墙上发布数据
),但在这种情况下,程序总是这样做,不检查数据库

$user_profile = $facebook->api('/me');
$name = $user_profile['name'];

      $mysqli = new mysqli("host","asd","pw","asdf");
                   echo "1";
               $sql = "SELECT COUNT(*) AS num FROM myTable WHERE userName = ?";
                   echo "2";
                if ($stmt = $mysqli->prepare($sql)) {
                   echo "3";
                $stmt->bind_param('s', $name);
                   echo "4";
                $stmt->execute();
                   echo "5";
                $results = $stmt->get_result();
                   echo "6";
                $data = mysqli_fetch_assoc($results);
                   echo "7";
                }
           if($data['num'] != 0)
            {
                    echo "bad";
                    print "user already exists\n";
            } else {
                    echo "good";    
                    $apiResponse = $facebook->api('/me/feed', 'POST', $post_data);
                    print "No user in database\n";
            }
    }
此外,我还尝试将
COUNT(*)
更改为
COUNT(userName)
,但相同

你能帮我吗

我读过这篇文章:但它对我没有帮助


注意:在这种情况下,我需要使用FB用户名。

你能试试这个吗,
$stmt->fetch()
而不是
mysqli\u fetch\u assoc($results)


Ref:

当使用面向对象的连接、查询、绑定和执行时,您可能希望使用对象或集成的获取,而不是
mysqli\u fetch\u assoc
这一问题有点离题,但很重要:您不应该使用用户名(它可以更改!),更好的方法是使用用户id。@RoyalBg感谢您的回答,但我真的不知道如何正确地做到这一点。@FexdelSollo感谢您的回答,但在这种情况下,我需要使用FB用户名,而不是用户名ID@RsPenki检查我的答案,我展示了一个示例并链接了文档。如果我的修复程序不起作用,您可以阅读获取流。由于混合了db api,因此无法工作。也没有explanation@RoyalBg,谢谢,这是我的错。更新答案。谢谢你的回答,但正如我说的,它只从5开始打印
123445
,它停止工作了。据我所知,这行代码
$results=$stmt->get_result()不正确。正如你所说,我改变了,但同样的问题——不工作,只打印到5个值和stuck。如果我使用这个
$stmt=$mysqli->prepare($sql)
而不是
如果(…)
它只打印3和stuck的值。@Rs Penki,更新了我的答案。请查收