更新2:
これが最も最適化されたものですか?
$DBH = new PDO( "connection string goes here" );
$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetch();
echo $result ["figure"];
$DBH = null;
更新1:
私はSQLクエリに制限を追加できることを知っていますが、必要ではないforeachループも取り除きたいです。
元の質問:
「foreach」セクションのためにデータベースから多くの行を返すのに適した次のスクリプトがあります。
データベースから常に1行しか取得しないことがわかっている場合、これを最適化するにはどうすればよいですか。データベースから1行しか取得できないことがわかっている場合、foreachループが必要な理由はわかりませんが、コードを変更する方法はわかりません。
$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;
取得するだけです。 1行のみを取得します。したがって、foreachループは不要です:D
$row = $STH -> fetch();
例(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;
FetchとLIMITを一緒に使用できます。 LIMITには、データベースが1つのエントリのみを返すという効果があるため、PHPが処理するデータは非常に少なくなります。フェッチでは、データベース応答から最初の(そして唯一の)結果エントリを取得します。
取得タイプを設定することで、さらに最適化できます。 http://www.php.net/manual/de/pdostatement.fetch.php を参照してください。列名でのみアクセスする場合は、配列に番号を付ける必要があります。
ORDER句に注意してください。 ORDERまたはWHEREを使用して、必要な行を取得します。それ以外の場合は、常にテーブルの最初の行を取得します。
試しましたか:
$DBH = new PDO( "connection string goes here" );
$row = $DBH->query( "select figure from table1" )->fetch();
echo $row["figure"];
$DBH = null;
PDOを使用したユーザー入力に基づいたデータベースSELECTクエリでこれを試すことができます。
$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);
単一のフィールドだけが必要な場合は、fetchの代わりにfetchColumnを使用できます- http://www.php.net/manual/en/pdostatement.fetchcolumn.php
mysqlの最適化にlimit 0,1
を使用する方法
そしてあなたのコードについて:
$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;
FetchColumnを使用するというStevenの提案のおかげで、コードから短い1行を削除することをお勧めします。
$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> query( "select figure from table1" );
$result = $STH -> fetchColumn();
echo $result;
$DBH = null;