MySQLi équivalent de mysql_result()?
Je suis le portage de certains vieux code PHP de mysql MySQLi, et j'ai couru dans un mineur accrocher.
Est-il pas l'équivalent de l'ancien mysql_result()
fonction?
Je sais mysql_result()
est plus lent que les autres fonctions lorsque vous travaillez avec plus de 1 ligne, mais beaucoup de temps, j'ai seulement 1 suite et 1 champ. En utilisant ça me permet de condenser 4 lignes en 1.
Ancien code:
if ($r && mysql_num_rows($r))
$blarg = mysql_result($r, 0, 'blah');
Code souhaité:
if ($r && $r->num_rows)
$blarg = $r->result(0, 'blah');
Mais il n'y a pas une telle chose. 🙁
Est-il quelque chose que je suis absent? Ou vais-je avoir à le sucer et de faire tout:
if ($r && $r->num_rows)
{
$row = $r->fetch_assoc();
$blarg = $row['blah'];
}
- Qu'avez-vous d'ici? Je suis dans la même situation
- Je n'ai jamais rien fait avec cette. Je suis juste en utilisant
if ($r && $r->num_rows) $blarg = $r->result(0, 'blah');
sur l ' occassion rare que j'en ai besoin... - merci, j'ai fini par utiliser mysqli_query et mysqli_fetch_assoc pour afficher les résultats.
Vous devez vous connecter pour publier un commentaire.
PHP 5.4 prend désormais en charge la fonction de la matrice de déréférencement, ce qui signifie que vous pouvez le faire:
Tout répondu, j'ai pensé que je pourrais améliorer la réponse donnée après avoir la même question. La fonction suivante reproduit le mysql_result() de la fonction, et retourne la valeur false lorsque vous êtes hors des limites du terrain sur votre demande (résultat vide, aucune ligne de ce numéro, pas de colonne de ce numéro). Il a l'avantage que, si vous ne spécifiez pas la ligne, il suppose 0,0 (moins de valeur à être passé). La fonction a été mise à jour pour permettre le numérique décalage du champ ou le nom du champ.
if (mysqli_num_rows($result) > $row) { ... }
, n'est-ce pas tout ce que vous devez vérifier?... en supposant que votre ne va pas passer dans un $row = -1... ou avec le résultat inverse de 5 lignes retournées... si vous demandez la ligne 0 c'est à moins de 5 (ce qui donne d'abord l'enregistrement), en demandant pour la ligne 4 est également bonne (vous donne le dernier enregistrement), en demandant pour la ligne 5 ou 6 échoue (5 ou 6 n'est pas moins de 5).Vous pouvez le faire en allant chercher un objet au lieu d'un tableau.
Vous avez besoin de PHP 5+ pour utiliser la méthode de chaînage de ce genre.
Alternativement, si vous utilisez la procédure MySQLi, il est facile d'écrire votre propre
mysqli_result
fonction qui correspond àmysql_result
.Bien, vous pouvez toujours le raccourcir à quelque chose comme ceci:
Mais c'est peut-être bon que vous allez obtenir.
Je vous suggère d'ajouter cette ligne à Cris solution afin d'être en mesure d'obtenir un résultat à la fois de faire
db_result('mytable.myfield)
etdb_result('myfield')
puisque c'est le comportement par défaut de l'originalmysql_result
fonction.Si vous sélectionnez UN champ dans la requête et vous attendre seulement un seul a renvoyé des données d'un champ sélectionné, alors cela fonctionne:
Voici une adaptation de Mario Lurig de la réponse à l'aide d'un
mysqli_result
objet au lieu de la version procédurale demysqli
.C'est une bonne réponse, à partir de http://php.net/manual/es/class.mysqli-result.php
- Je utiliser la fonction suivante pour remplacer mysql_result()
Si vous êtes à la recherche pour une bibliothèque robuste pour faire connexion de base de données, je vous suggère d'utiliser AdoDB. Cette bibliothèque peut se connecter à plusieurs bases de données, et vous n'avez pas à réécrire votre requête si vous modifiez la base de données, à condition qu'elles ne contiennent pas de SQL spécifique pour un certain moteur de base de données. Vérifier cette page pour une utilisation de l'échantillon. Aussi, si vous en PHP5, vous pouvez utiliser foreach pour l'itération.
J'espère que cela va vous aider à convertir n'importe quel vieux codes de plus solide et de la croix-code de base de données.