PHP 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循环,我不应该需要。

原文问题:

我有以下的脚本,这是很好的IMO由于“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; 

只要取。 只获得一行。 所以没有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的作用是数据库只返回一个条目,所以PHP必须处理的数据非常less。 通过读取,您可以从数据库响应中获得第一个(也是唯一的)结果条目。

您可以通过设置抓取types来进行更多优化,请参阅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; 

如果你只需要一个字段,你可以使用fetchColumn而不是fetch – http://www.php.net/manual/en/pdostatement.fetchcolumn.php

您可以尝试使用基于用户input使用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); 

如何使用limit 0,1为MySQL优化

和你的代码:

 $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; 

感谢Steven的build议,使用fetchColumn,这是我的build议,从您的代码中缩短1行。

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