2010-06-07 2 views
2

Je cherche à retreive une valeur numérique de la base de donnéesComment retourner la valeur numérique d'une requête de base de données en PHP?

function adminLevel() 
{ 
    $q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'"; 
    return mysql_query($q, $this->connection); 
} 

C'est le SQL.

J'ai alors écrit le php/html suivant:

<?php 
    $q = $database->adminLevel(); 
    if ($q > 7) 
    { 
     ?> 
     <a href="newleague.php">Create a new league</a> 
     <? 
    } 
    ?> 

Le problème que j'ai est que le userlevel est retourné sans incidence sur l'instruction if. Il est toujours affiché. Comment puis-je l'obtenir pour tester la valeur de userlevel est supérieure à 7?

Merci

Répondre

1

adminlevel() ne renvoie pas un nombre entier ici. Il renvoie un objet resultset mysql contenant une seule ligne et une seule colonne; le point de données contenu à l'intérieur est un entier. Vraisemblablement, cependant, PHP compare cet objet à des entiers qui arrivent à alwayus aboutissent à ce qu'il soit plus grand que 7. Mais il ne compare pas l'entier que vous vouliez comparer. Essayez ceci:

function adminLevel() 
{ 
    $q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'"; 
    $r = mysql_query($q, $this->connection); 
    if ($r and mysql_num_rows($r)) { 
     $s = mysql_fetch_assoc($r); 
     return $s['userlevel']; 
    } else { 
     // error handling; your query failed or returned no rows 
    } 
} 
+0

Je continue à faire ces erreurs stupides. J'oublie les principes de base de la gestion des données renvoyées. Merci pour ce bourgeon, vraiment utile. – sark9012

2

mysql_query renvoie une ressource. Vous devez extraire des données de cette ressource en utilisant certaines des fonctions mysql_fetch_ *, comme mysql_fetch_row http://php.net/mysql_fetch_row

0

Vous comparez une ressource mysql avec un entier, vous pouvez donc vous attendre à des résultats étranges. Utilisez mysql_result() pour récupérer une cellule de cette ressource.

1

mysql_query renvoie une ressource. Vous devez ensuite extraire le résultat de ceci. par exemple.

function adminLevel() 
{ 
    $q = "SELECT userlevel FROM ".TBL_USERS." WHERE id = '$_SESSION[id]'"; 
    $result = mysql_query($q, $this->connection); 
    if ($row = mysql_fetch_assoc($result)) { 
    $level = $row['userlevel']; 
    } else { 
    $level = 0; // some default value 
    } 

    // free the result resource after using it 
    mysql_free_result($result); 
    return $level; 
} 

Si vous pensez à ce sujet, dans le cas général une requête peut renvoyer plusieurs résultats si vous avez besoin d'un moyen de récupérer chacun de ces tour (par exemple une boucle while sur mysql_fetch_assoc) mais dans ce cas précis que vous Si vous sélectionnez userlevel par id, vous récupérerez 0 ou 1 ligne pour que nous puissions utiliser un if pour rechercher une ligne correspondante. Pour plus de détails, voir le documentation for mysql_query.

Questions connexes