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


PHP script to check If user already exists in MySQL database

我正在为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",所以现在我知道哪一行是不正确的。它打印1 2 3 4 5和灰泥。(代码下面的所有内容都没有加载。)所以这意味着这行$results = $stmt->get_result();是不正确的。但我误解了这句话怎么了?

如果我评论这行所有的代码加载(然后在用户墙上打印1 2 3 4 5 6 7 No user in database!和它post data。)但在这种情况下,程序总是这样做,而不是检查数据库。

此外,我还尝试将COUNT(*)更改为COUNT(userName),但相同。

你能帮我吗?

我读过这样一篇文章:检查mySQL数据库中现有用户的最佳方法?但这对我没有帮助。

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

你能试试这个吗,$stmt->fetch()而不是mysqli_fetch_assoc($results)

    $mysqli = new mysqli("host","asd","pw","asdf");
echo "1";
/* Create the prepared statement */
$stmt = $mysqli->prepare("SELECT COUNT(*) AS num FROM myTable WHERE userName = ?") or die("Prepared Statement Error: %s'n". $mysqli->error);
    /* Execute the prepared Statement */
    $stmt->execute();
    /* Bind results to variables */
    $stmt->bind_result($name);
    $data = $stmt->fetch();
    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";
    }   
    /* Close the statement */
    $stmt->close();

参考编号:http://forum.codecall.net/topic/44392-php-5-mysqli-prepared-statements/