PHP PDO返回单行

osh*_*nen 100 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;
Run Code Online (Sandbox Code Playgroud)

更新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;
Run Code Online (Sandbox Code Playgroud)

mjs*_*ier 191

只是取.只获得一行.所以不需要foreach循环:D

$row  = $STH -> fetch();
Run Code Online (Sandbox Code Playgroud)

例子(ty northkildonan):

$dbh = new PDO(" --- connection string --- "); 
$stmt = $dbh->prepare("SELECT name FROM mytable WHERE id=4 LIMIT 1"); 
$stmt->execute(); 
$row = $stmt->fetch();
Run Code Online (Sandbox Code Playgroud)

  • 如果在准备语句中使用"LIMIT 1",则最优化. (12认同)
  • @andrebruton` $ dbh = new PDO("--- connection string ---"); $ stmt = $ dbh-> prepare("SELECT name FROM mytable WHERE id = 4 LIMIT 1"); $ stmt->执行(); $ row = $ stmt-> fetch();` (3认同)
  • 非常好,请举个完整的例子.在上面的示例中,不仅仅是一条必须要去的地方. (2认同)
  • 如果你只需要一个键值数组,`fetch(PDO :: FETCH_ASSOC)`会将返回的数组减半. (2认同)

str*_*rry 15

$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;
Run Code Online (Sandbox Code Playgroud)

您可以一起使用fetch和LIMIT.LIMIT的作用是数据库只返回一个条目,因此PHP必须处理非常少的数据.使用fetch,您可以从数据库响应中获取第一个(也是唯一的)结果条目.

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

请注意ORDER子句.使用ORDER或WHERE获取所需的行.否则,您将获得表格中的第一行.


Bé *_*Pro 13

你试过了吗:

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

  • 你实际上可以更进一步做`$ row = $ DBH-> query($ query) - > fetch()['figure']`.如果`fetch`返回`false`因为没有结果,PHP会默默地忽略无效的键引用.如果`query`出现问题,取决于你如何设置错误处理,它将抛出异常(在我看来是期望的)或者你将获得一个`无效的对象方法引用"fetch"on "false"...."错误,无论如何你都会得到这种形式,因为查询显然失败了. (3认同)

Ste*_*hen 7

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


use*_*468 6

您可以尝试使用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);
Run Code Online (Sandbox Code Playgroud)

  • 我想你只是有一个糟糕的一天兄弟,或者你只是想要突出你的个人资料.我的回答证实了使用带有PDO查询的SELECT函数的变量的相同场景.我将从我的回答中删除sql注入注释,以便让你的一天(和我的). (3认同)

Koo*_*bin 5

如何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;
Run Code Online (Sandbox Code Playgroud)