2013-12-12 63 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

相關問題