2012-02-14 83 views
0

我是一名php/mySQL新手,並且試圖獲得它的竅門。我有代碼來檢測我是否得到用戶名/密碼匹配,現在我試圖獲取用戶ID字段,所以我可以更新記錄。繼承人我到目前爲止:我怎樣才能得到一個MySQL表上的字段?

$sql = "SELECT username FROM users WHERE username='$username' AND password='$password'"; 
    $result = $link->query($sql) or die(mysqli_error()); 

使用print_r($ result)顯示有一個項目,但我從這裏失去了。

+0

你說你的問題「userid」,但在你的例子中你說「用戶名」,這是什麼?另外,請確保您正在轉義$ username和$ password。 – 2012-02-14 03:27:33

+0

即時通訊試圖獲得這是我的主要用戶名。目標是更新該記錄中的字段sessionid,如果您不認爲我會以正確的方式隨意糾正我。 – jfisk 2012-02-14 03:29:31

+1

您需要從'$ result'中獲取一行並使用'$ result-> fetch_assoc()' – 2012-02-14 03:29:48

回答

3

試試這個。

$sql = "SELECT username FROM users WHERE username='$username' AND password='$password'"; 
$result = $link->query($sql) or die(mysqli_error()); 

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 

     $userID= $row['username'] ; 
     // If you need other field as userID just change the sql and the index of $row according to that. 

} 

編輯

如果你想獲得只有一行。

if($result->num_rows==1) 
{ 
    $row = $result->fetch_array(MYSQLI_ASSOC); 
    $userID = $row["username"]; 
} 
+0

Typo in this例如,當您使用$ result時,您使用$ res。 – 2012-02-14 03:34:59

+0

感謝@AlexLunix注意到這一點。 – 2012-02-14 03:36:38

+0

偉大的答案,爲upvote,如果theres只有1個對象我需要(像在這種情況下)我需要使用while循環嗎? – jfisk 2012-02-14 03:42:08

1

也許這會有所幫助。在任何編程語言,運行SQL查詢是要包括以下幾個步驟:

  1. 建設要運行SQL語句的文本。
  2. (可選)如果語句包括使用參數(或「佔位符」),製備參數值將被代替它們中的每一個陣列。
  3. (「準備」和...)在一些以前打開的「數據庫連接」上運行查詢。 (在您的示例中,「$ link」必須對應於該連接。)這會給您一個句柄(您稱之爲「$ result」),該句柄對應於該查詢返回的零個或多個行。
  4. 現在,使用該句柄一次一個地檢索這些行中的每一行,直到沒有更多或直到您厭倦爲止。
  5. (可選)整潔和「關閉」句柄,從而向數據庫系統表明它可以丟棄它用來將這些行提供給您的所有資源。

「這些,簡單來說,是基本的步驟,在已知的宇宙中每一個程序會穿過去,」如果你現在通過PHP文件瀏覽一遍,你會看到有是與這些步驟中的每一個相對應的功能。瀏覽你所閱讀的章節,看看你現在是否可以匹配到剛剛描述的場景。 HTH ...