2010-01-18 5 views
1

Est-il possible de raccourcir ce code:Comment réduire ce code?

$resultCategoryName = mysql_query("SELECT ecname FROM electioncategorymaster WHERE ecid=".$Category); 
$rowCategoryName = mysql_fetch_row($resultCategoryName); 
$CategoryName = $rowCategoryName[0]; 
+1

Si vous trouvez un chemin plus court, voyez si cela prend également en charge l'utilisation de variables de liaison/d'espaces réservés. – Thilo

+0

Pourquoi ne pas nous dire pourquoi vous voulez "raccourcir" le code? On dirait que vous êtes en train de courir après des choses qui ne sont pas pertinentes, et de manquer l'injection SQL possible dans votre script (en fonction des lignes précédentes). – hobodave

+0

Pas vraiment. Je veux éliminer le besoin de la dernière rangée. Juste trouver des moyens d'écrire un meilleur code. Je suis un débutant PHP. – RKh

Répondre

3

Peut-être que vous devriez regarder dans un ORM de quelque sorte. Zend_Db a une méthode pour saisir une seule valeur à partir d'une requête.

$ecname = $db->fetchOne("SELECT ecname FROM electioncategorymaster WHERE ecid = ?", $Category); 
+0

@jspcal: la version hobodave de la reliure est plus concise, ce que le PO recherchait en premier lieu: la seule façon dont les gens vont utiliser les variables de bind (à moins de les frapper pour ne pas le faire), est-ce que Il n'y a pas de dactylographie supplémentaire impliqué. – Thilo

+1

@thilo: la deuxième façon est plus consciente si vous avez un tableau assoc – jspcal

+0

@jspcal: Ne pensez pas, vous pouvez faire '$ db-> fetchOne ('select ecname de electioncategorymaster où ecid =? OR foo =?' , array ($ Category, $ foo)); ' –

1

Je ne pense pas qu'il peut être réduite plus loin. Toutes les fonctions exécutent leur tâche au niveau très minimal. Vous pouvez seulement raccourcir les noms de variables :)

0

Je ne suis pas un gourou PHP, mais peut-être que vous devriez utiliser un framework ou une classe pour chaque table.

Je ne pense pas que le code puisse être réduit en soi.

0
$rowCategoryName = mysql_fetch_row(mysql_query("SELECT ecname FROM electioncategorymaster WHERE ecid=$Category")); 
$CategoryName = $rowCategoryName[0]; 

C'est le plus court que je puisse penser. Vous devriez vraiment faire SELECT ecname FROM electioncategorymaster WHERE ecid='$Category'" (en plaçant des guillemets simples autour de la variable).

+1

Non, non, non! Vous ne transmettez pas les paramètres à la base de données de cette façon! –

+1

Pourquoi cela a-t-il été rejeté? C'est vrai. Le fait que cela ne soit pas particulièrement utile ne change pas le fait que c'est la seule vraie réponse à la question. –

+0

@Brendan Long: Ce n'est pas moi qui l'a déprécié, mais probablement en raison du problème d'injection SQL. –

2

No. En raison d'un défaut dans PHP suivants n'est pas possible:

$CategoryName = mysql_fetch_row($resultCategoryName)[0]; 
+0

Je ne parlerais pas d'une erreur. Et c'est prévu AFAIK –

1

Vous pouvez utiliser mysql_result pour obtenir categroyName en 2 étapes.

 

$resultCategoryName = mysql_query("SELECT ecname FROM electioncategorymaster WHERE ecid=".$Category); 
$categoryName = mysql_result($resultCategoryName, 0); //Extract First column 
 

Voici la référence link.

+0

Assurez-vous de lire la partie indiquant combien il est lent pour plusieurs requêtes. –

+0

@Brendan: Cela ne semble pas s'appliquer ici, cependant. Il n'a besoin que d'une seule colonne. – Thilo

+0

Ouais je sais, je l'ai juste fait remarquer car c'est une bonne chose à savoir quand on apprend cette fonction. –

0

C'est comme ça que je le fais. J'utilise sprintf pour m'assurer que seules les valeurs numériques sont passées en id. J'ajoute également la phrase SQL avec LIMIT 1 pour m'assurer qu'un seul enregistrement est récupéré.