MISE À JOUR 2:
Alors, est-ce le plus optimisé possible?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
MISE À JOUR 1:
Je sais que je peux ajouter une limite à la requête SQL, mais je veux aussi me débarrasser de la boucle foreach, dont je ne devrais pas avoir besoin.
QUESTION ORIGINALE:
J'ai le script suivant qui est bon IMO pour renvoyer de nombreuses lignes de la base de données à cause de la section "foreach".
Comment optimiser cela, si je sais que je n'obtiendrai toujours qu'une ligne de la base de données. Si je sais que je n'obtiendrai qu'une seule ligne de la base de données, je ne vois pas pourquoi j'ai besoin de la boucle foreach, mais je ne sais pas comment changer le code.
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetchAll();
foreach( $result as $row ) {
echo $row["figure"];
}
$DBH = null;
$STH - $DBH -> prepare
devrait être à$STH = $DBH -> prepare
plusieurs endroits sur cette page.Réponses:
Allez chercher. n'obtient qu'une seule ligne. Donc pas de boucle foreach nécessaire: D
exemple (ty northkildonan):
la source
$dbh = new PDO(" --- connection string --- "); $stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); $stmt->execute(); $row = $stmt->fetch();
fetch(PDO::FETCH_ASSOC)
coupera le tableau retourné de moitié si vous n'avez besoin que d'un tableau clé-valeur.LIMIT 1
tout le temps? Savoir que vous sélectionnez uneUNIQUE
valeur vient à l'esprit.Vous pouvez utiliser simultanément Fetch et LIMIT. LIMIT a pour effet que la base de données ne renvoie qu'une seule entrée, donc PHP doit gérer très moins de données. Avec fetch, vous obtenez la première (et seule) entrée de résultat de la réponse de la base de données.
Vous pouvez faire plus d'optimisation en définissant le type de récupération, voir http://www.php.net/manual/de/pdostatement.fetch.php . Si vous y accédez uniquement via les noms de colonnes, vous devez numéroter un tableau.
Soyez conscient de la clause ORDER. Utilisez ORDER ou WHERE pour obtenir la ligne requise. Sinon, vous obtiendrez la première ligne du tableau avec l'heure.
la source
As-tu essayé:
la source
$row = $DBH->query($query)->fetch()['figure']
. Sifetch
retournefalse
car il n'y a aucun résultat, PHP ignorera silencieusement la référence de clé invalide. Si quelque chose ne va pas avecquery
, selon la façon dont vous avez configuré votre gestion des erreurs, soit cela lancera une exception (souhaitée, à mon avis), soit vous obtiendrez uneInvalid object method reference "fetch" on "false"....
erreur, une forme que vous auriez de toute façon obtenue parce que la requête a manifestement échoué.Si vous ne voulez qu'un seul champ, vous pouvez utiliser fetchColumn au lieu de fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
la source
Vous pouvez essayer ceci pour une requête SELECT de base de données basée sur l'entrée utilisateur à l'aide de PDO:
la source
que diriez-vous d'utiliser
limit 0,1
pour l'optimisation mysqlet à propos de votre code:
la source
Grâce à la suggestion de Steven d'utiliser fetchColumn, voici ma recommandation de couper une ligne de votre code.
la source