2013-12-12 64 views
0

我正在爲Facebook創建簡單的遊戲。所有使用應用程序的用戶都被寫入數據庫。我需要經常檢查如果用戶已經存在在數據庫中,如何正確地執行該操作?PHP腳本來檢查如果用戶已經存在於MySQL數據庫

所以我有可變$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"; 
      } 
    } 

此代碼無效,應在用戶牆上發佈數據如果用戶不存在於數據庫中。我花了很多時間找到原因,但沒有成功。調試後它不顯示任何錯誤。在我使用的每條線後面找到哪條線是不正確的,所以現在我知道哪條線是不正確的。它打印1 2 3 4 5和stucks。 (代碼下面的所有內容都沒有加載。)所以這意味着這條線$results = $stmt->get_result();是不正確的。但我誤解了這條線有什麼問題?

如果我對這行代碼加載註釋(然後在用戶的牆上打印1 2 3 4 5 6 7 No user in database!和它post data),但在這種情況下,程序總是執行相同的操作,而不是檢查數據庫。

此外,我試圖將COUNT(*)更改爲COUNT(userName),但相同。

那麼你能幫助我嗎?

我讀過這個:Best way to check for existing user in mySQL database?但它沒有幫助我。

P.s.在這種情況下,我需要使用FB用戶名。

+0

使用面向對象的連接,查詢,綁定和執行時,您可能需要使用對象oreinted獲取,而不是' mysqli_fetch_assoc' –

+0

有些問題不重要: 你不應該使用用戶名(它可以改變!),更好的方法是使用用戶ID。 –

+0

@RoyalBg謝謝你的回答,但我不知道如何正確地做到這一點。 –

回答

0

你可以試試這個,的$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/

+1

由於混合了db api,這將不起作用。也沒有任何解釋 –

+0

@Royal Bg,謝謝,這是我的錯。更新了答案。謝謝 –

+0

謝謝你的回答,但正如我所說的,它只能從5打印'1 2 3 4 5'它停止工作。所以正如我理解這一行'$ results = $ stmt-> get_result();'是不正確的。我改變了你的說法,但同樣的問題 - 沒有工作,打印只有5的價值和stucks。 –

相關問題