PDATE 2:
Alors, est-ce le plus optimisé qu’il puisse obtenir?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
PDATE 1:
Je sais que je peux ajouter une limite à la requête SQL, mais je souhaite également me débarrasser de la boucle foreach, dont je n’aurais pas besoin.
QUESTION ORIGINALE:
J'ai le script suivant qui est une bonne OMI pour renvoyer de nombreuses lignes de la base de données à cause de la section "foreach".
Comment puis-je optimiser ceci, si je sais que je n'aurai toujours qu'une ligne dans la base de données. Si je sais que la base de données ne contient qu'une ligne, 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;
Va chercher. obtient seulement une rangée. Donc, pas de boucle foreach nécessaire: D
$row = $STH -> fetch();
exemple (ty northkildonan):
$dbh = new PDO(" --- connection string --- ");
$stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1");
$stmt->execute();
$row = $stmt->fetch();
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> prepare( "select figure from table1 ORDER BY x LIMIT 1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
Vous pouvez utiliser fetch et LIMIT ensemble. LIMIT a pour effet que la base de données ne renvoie qu'une entrée, donc PHP doit gérer beaucoup moins de données. Avec fetch, vous obtenez le premier (et unique) 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 colonne, vous devez disposer d'un tableau numéroté.
Soyez conscient de la clause ORDER. Utilisez ORDER ou WHERE pour obtenir la ligne requise. Sinon, vous obtiendrez la première ligne du tableau à toute heure.
As-tu essayé:
$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;
Vous pouvez essayer ceci pour une requête SELECT de base de données basée sur une entrée utilisateur à l'aide de PDO:
$param = $_GET['username'];
$query=$dbh->prepare("SELECT secret FROM users WHERE username=:param");
$query->bindParam(':param', $param);
$query->execute();
$result = $query -> fetch();
print_r($result);
Si vous voulez juste un seul champ, vous pouvez utiliser fetchColumn au lieu de fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php
comment utiliser limit 0,1
pour l'optimisation mysql
et à propos de votre code:
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH ->fetch(PDO::FETCH_ASSOC)
echo $result["figure"];
$DBH = null;
Grâce à la suggestion de Steven d'utiliser fetchColumn, voici ma recommandation: couper une ligne de votre code.
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> query( "select figure from table1" );
$result = $STH -> fetchColumn();
echo $result;
$DBH = null;