2009-11-16 5 views
2

Je suis descendu pour passer de mysql à mysqli à mi-chemin d'un projet - et courir dans ce hicup.PHP - Obtenez un seul résultat en utilisant mysqli

Quelle est la meilleure façon d'y parvenir: // vérifier si le nom d'utilisateur est pris $ result = mysql_result (mysql_query ("SELECT COUNT (*) FROM utilisateur où le nom d'utilisateur = '".. $ Username "'"))

Je ne peux pas trouver une version exacte de mysql_result

J'ai essayé:

$ result = mysqli_num_rows ($ db-> query ("SELECT * FROM utilisateur où le nom d'utilisateur = '" $ username. . "'"))

Ce qui fonctionne mais je pense que l'utilisation de count serait plus facile sur le serveur mySQL. Y a-t-il un meilleur moyen?

Répondre

2

Si vous essayez de déterminer si le nom d'utilisateur existe déjà, je vous suggère de changer votre requête en "SELECT 1 FROM user WHERE username = '". $ nom d'utilisateur. « ' »:

$res = $db->query("SELECT 1 FROM user WHERE username='".$username."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 

Il est aussi une bonne pratique pour échapper à toute intervention de l'utilisateur avant d'interroger la base de données que vous vous quittez ouverts pour des attaques par injection SQL. Voici la version sûre:

$res = $db->query("SELECT 1 FROM user WHERE username='". mysqli_real_escape_string($username) ."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 
+0

J'ai déjà une fonction 'clean' que je lance toutes mes entrées si '$ input = mysqli_real_escape_string (htmlentities ($ input, ENT_QUOTES))' Merci pour la pensée additionnelle de toute façon :) Oh et le '1' dans le lieu de '*' est une belle addition merci. – Mark

1

Assurez-vous que vous avez un index sur la table user qui fait référence à la colonne username et vous êtes tous ensemble. Le code que vous avez écrit fonctionnera.

L'utilisation de count() ne fera aucune différence car username est supposé être unique. Si vous vous assurez que l'index est également de type UNIQUE, vous devrez appliquer des noms d'utilisateur uniques.