2012-08-10 66 views
0

在MySQL中我有下面這段代碼:如何從MySQL以下更改代碼的mysqli

$row = mysql_fetch_assoc($query); 
$dbactive = $row['active']; 

if ($dbactive == 1){ 

... 

}... 

但是我在我的項目中使用的mysqli。所以我試圖改變它下面,但我不完全正確。任何人都可以幫我糾正mysqli中的下面的語句,以便它匹配上面的mysql語句嗎?

UPDATE:

我的企圖的mysqli:

// don't use $mysqli->prepare here 
     $query = "SELECT TeacherForename, TeacherSurname, TeacherUsername, TeacherPassword, Active FROM Teacher WHERE TeacherUsername = ? AND TeacherPassword = ? LIMIT 1"; 
     // prepare query 
     $stmt=$mysqli->prepare($query); 
     // You only need to call bind_param once 
     $stmt->bind_param("ss",$teacherusername,$teacherpassword); 
     // execute query 
     $stmt->execute(); 
     // get result and assign variables (prefix with db) 
     $stmt->bind_result($dbTeacherForename,$dbTeacherSurname,$dbTeacherUsername,$dbTeacherPassword, $dbActive); 

      while($stmt->fetch()) { 

     if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) { 
    if ($dbActive == 1){ 

     $loggedIn = true; 
} 
     } 

} 

回答

0

如果你只返回一行,你不需要while循環。 bind_result()需要x列,並將它們的值按順序分配給您傳入的變量。因此,假定您的結果只包含一列一列,則bind_result($dbactive)將與$dbactive = $row['active']一起包含mysql_*

+0

我已經更新代碼,我沒有測試它,但你覺得代碼以上是正確的還是會導致問題? – user1394925 2012-08-10 14:34:47

+0

@ user1517628你不需要第二個'bind_result()'。您已經在第一次調用中將結果綁定到'$ dbactive'並傳遞了多個變量。 – Matt 2012-08-10 14:37:58

+0

抱歉,第二次綁定的結果是我不小心忘了在更新之前將它從代碼中刪除。我會測試它,看看會發生什麼:) – user1394925 2012-08-10 14:42:06

0

綁定變量意味着只要調用 - > fetch(),結果行值就會自動放入該變量中。你搗毀與你的綁定

$dbactive = $stmt['active']; 

$ stmt是一個結果對象,而不是行對象或數組。它不會有任何通過查詢提取的數據。

+0

我更新了代碼,我沒有測試過它,但你認爲上面的代碼是正確的還是會導致問題? – user1394925 2012-08-10 14:35:30

0

你可以只使用查詢方法,

$result = $myslqi->query($query); 
while($row = $result->fetch_object()){ 
    $row->active … 
} 
+0

我有更新的代碼,我沒有測試過,但你認爲上面的代碼是正確的還是會導致問題? – user1394925 2012-08-10 14:35:08

+0

您正在複製用戶名/密碼檢查。如果提供的u/p不匹配,那麼您的查詢將返回0行。有沒有指望讓MySQL比較u/p,然後讓PHP做同樣的事情。 – 2012-08-10 14:46:07

0

有關讀取單個行,你可以使用:

if($query = $db->prepare("your sql query where field1=? AND field2=?")){ 

    $query->bind_param('ss', $user_id); 
    $query->execute(); 
    $query->bind_result($field1, $field2); 
    $query->fetch(); 
    echo $field1; 

}