2012-08-10 2 views
0

Dans mysql je le code ci-dessous:comment changer le code ci-dessous de MySQL à Mysqli

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

if ($dbactive == 1){ 

... 

}... 

Mais je dois utiliser mysqli dans mon projet. J'ai donc essayé de le changer ci-dessous mais je ne comprends pas très bien. Quelqu'un peut-il m'aider à corriger l'instruction ci-dessous dans mysqli afin qu'elle corresponde à la déclaration de mysql ci-dessus?

MISE À JOUR:

Ma tentative 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; 
} 
     } 

} 

Répondre

0

Si vous êtes seulement le retour d'une ligne, vous n'avez pas besoin d'une boucle while. bind_result() prend x colonnes et affecte leurs valeurs, dans l'ordre, aux variables que vous transmettez. Donc, en supposant que votre résultat ne contient qu'une ligne avec une colonne, bind_result($dbactive) serait le même que $dbactive = $row['active'] avec mysql_*.

+0

Je code mis à jour, je ne l'ai pas testé, mais pensez-vous que le code ci-dessus est correct ou causera-t-il toujours un problème? – user1394925

+0

@ user1517628 Vous n'avez pas besoin de la seconde 'bind_result()'. Vous liez déjà le résultat à '$ dbactive' dans le premier appel avec plusieurs variables passées. – Matt

+0

Désolé le deuxième résultat de lier était moi étant négligent et en oubliant de le retirer du code avant la mise à jour. Je vais le tester et voir ce qui se passe :) – user1394925

0

La liaison d'une variable signifie que la valeur de la ligne de résultat sera automatiquement placée dans cette variable à chaque appel de -> fetch(). Vous bousiller que la liaison avec votre

$dbactive = $stmt['active']; 

$ stmt est un objet de résultat, pas un objet de ligne ou de tableau. Il n'aurait aucune des données que vous avez extraites via la requête.

+0

J'ai mis à jour le code, je ne l'ai pas testé mais pensez-vous que le code ci-dessus est correct ou va encore poser un problème? – user1394925

0

Vous pouvez simplement utiliser la méthode de requête,

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

J'ai mis à jour le code, je ne l'ai pas testé mais pensez-vous que le code ci-dessus est correct ou va-t-il encore poser problème? – user1394925

+0

Vous dupliquez la vérification du nom d'utilisateur/mot de passe. Si les u/p fournis ne correspondent pas, alors votre requête retournera 0 lignes. MySQL ne compare pas u/p, alors que PHP fait exactement la même chose. –

0

Pour aller chercher une seule ligne, vous pouvez utiliser:

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; 

}