2013-12-12 66 views
0

我正在为Facebook创建简单的游戏。所有使用应用程序的用户都被写入数据库。我需要经常检查如果用户已经存在在数据库中,如何正确地执行该操作?PHP函数检查用户是否存在于MySQL数据库中

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

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

$user_profile = $facebook->api('/me'); 
$name = $user_profile['name']; 
     $mysqli = new mysqli("asd","asdf","pw","asdssst"); 
    /* Create the prepared statement */ 
    $stmt = $mysqli->prepare("SELECT COUNT(*) AS num FROM myTable WHERE userName = ?") or die("Prepared Statement Error: %s\n". $mysqli->error); 
     /* Bind results to variables */ 
     $stmt->bind_param('s', $name); 
     /* Execute the prepared Statement */   
     $stmt->execute(); 
     $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(); 

此代码无效,应在用户墙上发布数据如果用户不存在于数据库中。我花了很多时间找到原因,但没有成功。我试过用$stmt->bind_result($name);而不是$stmt->bind_param('s', $name);但是一样。无论如何,如果用户在数据库中,它总是返回:good No user in database。这意味着PHP总是返回0;

另外我试图在数据库MySQL中使用SELECT COUNT(*) AS num FROM myTable WHERE userName = FirstName LastName,它工作成功。当用户名未找到时返回num 0,当用户名在数据库中时返回num 1

当我明白这个代码总是返回$data['num']; = 0

也许你知道是什么问题就在这里?

P.S. 我知道我需要使用FB用户名而不是用户名,但在这种情况下,我需要这样做。

我读过这个:Best way to check for existing user in mySQL database?但它没有帮助我。

回答

0

检查变量是否有结果。像这样的东西应该工作。

//So you have your variable $name here + it returns a value 
$name = $user_profile['name']; 
//You can put this if statement anywhere below it 
if($name > 1){ 
//log user in 
} 
+0

谢谢你的答案,但我误解了其中的这部分代码我需要使用? – user3097011

+0

您需要在获得查询结果后放置这类代码。 – ChaseC

+0

你能更新你的答案吗?看起来像我的代码中,请吗?当然如果你有时间的话。 – user3097011

0

我会用这样的

$mysqli = new mysqli('',"","",""); 
$query = 'SELECT username FROM user WHERE username = ?'; 
$stmt = $mysqli->prepare($query); 
$name = 'asdf'; 
$stmt->bind_param('s', $name); 
$stmt->execute(); 
$stmt->bind_result($user); 
if($stmt->fetch()) 
    echo 'Username '.$user. ' exists'; 
else 
    echo 'User doesnt exists'; 
$stmt->close(); 
+0

谢谢你的回答,但是在这两种情况下,我都会得到'用户不存在',从不知道如果用户被写入数据库。 – user3097011

+0

也许这行不正确'$ stmt-> bind_result($ user);'?哪里得到$用户价值? – user3097011

+0

bind_result用于将数据绑定到变量中。例如,如果您的查询请求两个参数,如“SELECT用户名,密码...”,则告诉bind_result($ user,$ password)将该数据保存到相应的变量中。 – Marko

相关问题