2017-09-14 2 views
0

Je veux récupérer cette ligne et l'enregistrer dans $notescheck, mais quand j'essaye de faire cela, le $notescheck est vide quand je veux écho et il n'y a aucune erreur. Avec des instructions non préparées, cela fonctionne bien.

Instruction préparée fetch row ne renvoie rien

code:

if($user_ok == true) { 
    $sql = "SELECT notescheck FROM users WHERE username=? LIMIT 1"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("s",$log_username); 
    $stmt->execute(); 
    $row = $stmt->fetch(); 
    $notescheck = $row[0]; 
    $stmt->close(); 
} 

Avec déclaration non préparée, il ressemblerait à ceci:

if($user_ok == true) { 
    $sql = "SELECT notescheck FROM users WHERE username='$log_username' LIMIT 1"; 
    $query = mysqli_query($conn, $sql); 
    $row = mysqli_fetch_row($query); 
    $notescheck = $row[0]; 
    mysqli_close($conn); 
} 

Répondre

1

Ce n'est pas comment fetch() fonctionne avec les commandes préparées, vous Ne récupérez pas un tableau comme vous le pensez. Vous devez également lier le résultat du select dans les variables, puis les utiliser pour les afficher. S'il y a plusieurs enregistrements, vous utiliseriez une while($stmt->fetch){ echo $notescheck };

if($user_ok == true) { 
    $sql = "SELECT notescheck FROM users WHERE username=? LIMIT 1"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("s",$log_username); 
    $stmt->execute(); 
    $stmt->bind_result($notescheck); 
    $stmt->fetch(); 
    $stmt->close(); 
} 
echo $notescheck; 

Vous devriez vérifier en lisant ceci:

http://php.net/manual/en/mysqli-stmt.fetch.php

Plusieurs enregistrements correspondant à nom d'utilisateur = x ressemblerait à ceci:

if($user_ok == true) { 
     $sql = "SELECT notescheck FROM users WHERE username=? LIMIT 1"; 
     $stmt = $conn->prepare($sql); 
     $stmt->bind_param("s",$log_username); 
     $stmt->execute(); 
     $stmt->bind_result($notescheck); 
     $stmt->store_result() 
     while($stmt->fetch()){ 
      echo $notescheck; 
     } 
     $stmt->close(); 
    }