PHP PDO 如何获取单行?

问题描述 投票:0回答:7

我有以下脚本,在我看来,由于“foreach”部分,它非常适合从数据库返回许多行。

我该如何优化这个,如果我知道我总是只能从数据库中获取 1 行。如果我知道我只会从数据库中获取 1 行,我不明白为什么需要 foreach 循环,但我不知道如何更改代码。

$STH = $DBH -> prepare( "select figure from table1" );
$STH -> execute();
$result = $STH -> fetchAll();
foreach( $result as $row ) {
    echo $row["figure"];
}
php pdo
7个回答
249
投票

只需获取即可。只得到一行。所以不需要 foreach 循环 :D

$row = $stmt->fetch();

示例

$id = 4;
$stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=? LIMIT 1"); 
$stmt->execute([$id]); 
$row = $stmt->fetch(PDO::FETCH_ASSOC);

19
投票
$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 必须处理非常少的数据。通过 fetch,您可以从数据库响应中获取第一个(也是唯一一个)结果条目。

您可以通过设置获取类型进行更多优化,请参阅http://www.php.net/manual/de/pdostatement.fetch.php。如果您仅通过列名称访问它,则需要编号数组。

注意 ORDER 子句。使用 ORDER 或 WHERE 获取所需的行。否则,您始终会获得表中的第一行。


14
投票

你尝试过吗:

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

11
投票

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


11
投票

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

9
投票

使用

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;

4
投票

感谢 Steven 建议使用 fetchColumn,这是我建议从代码中删减一行。

$DBH = new PDO( "connection string goes here" );
$STH = $DBH->query( "select figure from table1" );
$result = $STH->fetchColumn();
echo $result;
$DBH = null;
© www.soinside.com 2019 - 2024. All rights reserved.