2010-01-09 4 views
0

J'ai ce code pour obtenir le nom d'utilisateur qu'un ami a envoyé à quelqu'un comme utilisateur du message. mysql_num_rows ne fonctionne pas et mes noms d'utilisateur apparaissent comme inconnus. Est-ce que cela a quelque chose à voir avec mysql_num_rows()?Qu'est-ce qui ne va pas avec mysql_num_rows()?

function getusername($userid) { 
    $sql = "SELECT username FROM user WHERE `id` = '".$userid."' LIMIT 1"; 
    $result = mysql_query($sql); 
    // Check if there is someone with this id 
    if(mysql_num_rows($result)) { 
     // if yes get his username 
     $row = mysql_fetch_row($result); 
     return $row[0]; 
    } else { 
     // if not, name him Unknown 
     return "Unknown"; 
    } 
} 
+0

Ne devriez-vous pas avoir 'if (mysql_num_rows ($ result)> 0)'? – Steven

+2

Méfiez-vous des injections SQL - utilisez 'mysql_real_escape_string()'. –

Répondre

3

Vous ne devez pas utiliser mysql_num_rows() du tout. vis:

function getusername($userid) 
    { 
     $sql = "SELECT username FROM user WHERE `id` = '$userid' LIMIT 1"; 
     $result = mysql_query($sql); 
     // Check if there is someone with this id 
     if ($result && ($row = mysql_fetch_row($result))) 
      return $row[0]; 
     else 
      // if not, name him Unknown 
      return "Unknown"; 
    } 

éditer: aussi, vous n'avez pas à sortir de la chaîne: ". $ userid." ... c'est pourquoi vous avez utilisé la forme "str", au lieu de "str".

+0

+1 pour élever un alternative valide.Mais il semble presque tricher car il ne répond pas à la question primaire. – wallyk

+0

Non, en fait, il ne répond pas et fonctionne parfaitement +1 et merci beaucoup. – H4cKL0rD

+0

vous êtes les bienvenus. – dar7yl

0

Vous pouvez vérifier s'il y a eu une erreur mySQL pour la requête. Un problème est peut-être lié à la connexion à la base de données.

Dans le passé j'avais l'habitude d'oublier de sélectionner une base de données après la connexion.

http://www.php.net/manual/en/function.mysql-error.php

+0

non il s'est parfaitement connecté il a retourné everythign mais le nom d'utilisateur de qui a envoyé le pm – H4cKL0rD

4

Essayez faisant écho à la requête et si l'ID est placé correctement, alors assurez-vous qu'un tel ID existe réellement, puis, après l'exécution de la requête exécutée echo mysql_error() pour voir s'il y avait des erreurs. Cela devrait couvrir toutes les bases et vous donner la réponse dont vous avez besoin.

4

Avant de vérifier le nombre de lignes, vérifiez que la requête a réussi:

$result = mysql_query($sql); 
if (!$result) 
{ 
    error(); // whatever needs to be done 
    return; 
} 

// Check the number of rows 
if (mysql_num_rows($result) > 0) { 
1

Je n'ai pas travaillé avec MySQL depuis longtemps, alors pardonnez-moi si je suis worng.

Il me semble que votre contrainte vérifie pour voir si l'ID de colonne est égale à une chaîne

'".$userid."' 

Si id est un entier de quelque sorte, cette vérification peut échouer. (Encore une fois, je peux me tromper, mais ce qui est le mal à essayer?)

Vous pouvez essayer de modifier la requête pour lire

$sql = "SELECT username FROM user WHERE `id` = ".$userid." LIMIT 1"; 

à moins id est vraiment une chaîne.

J'espère que cette aide.

http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html

+0

Cela ne devrait pas importer dans MySQL – Louis

+0

Merci ... Comme je l'ai dit, ça fait longtemps que j'ai utilisé PHP/MySQL –

0

solution globale aux problèmes comme celui-ci

essayer:

$sql = "SELECT username FROM user WHERE `id` = '".$userid."' LIMIT 1"; 
echo "Query=$sql"; 

et exécutez valeur affichée dans phpmyadmin-> SQL, contrôle fonctionne-t-il?

Questions connexes