web-dev-qa-db-ja.com

PHP 1行を返すPDO

更新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;
95
oshirowanen

取得するだけです。 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();
186
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;

FetchとLIMITを一緒に使用できます。 LIMITには、データベースが1つのエントリのみを返すという効果があるため、PHPが処理するデータは非常に少なくなります。フェッチでは、データベース応答から最初の(そして唯一の)結果エントリを取得します。

取得タイプを設定することで、さらに最適化できます。 http://www.php.net/manual/de/pdostatement.fetch.php を参照してください。列名でのみアクセスする場合は、配列に番号を付ける必要があります。

ORDER句に注意してください。 ORDERまたはWHEREを使用して、必要な行を取得します。それ以外の場合は、常にテーブルの最初の行を取得します。

14
strauberry

試しましたか:

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

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

単一のフィールドだけが必要な場合は、fetchの代わりにfetchColumnを使用できます- http://www.php.net/manual/en/pdostatement.fetchcolumn.php

6
Stephen

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

FetchColumnを使用するというStevenの提案のおかげで、コードから短い1行を削除することをお勧めします。

$DBH = new PDO( "connection string goes here" );
$STH - $DBH -> query( "select figure from table1" );
$result = $STH -> fetchColumn();
echo $result;
$DBH = null;
1
jhloke