web-dev-qa-db-fra.com

PHP PDO renvoyant une seule ligne

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;
96
oshirowanen

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();
188
mjspier
$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.

14
strauberry

As-tu essayé:

$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;
12
Bé Khỏe Bé Pro

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);
6
user3162468

Si vous voulez juste un seul champ, vous pouvez utiliser fetchColumn au lieu de fetch - http://www.php.net/manual/en/pdostatement.fetchcolumn.php

6
Stephen

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;
3
KoolKabin

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;
1
jhloke