-2

使用 SELECT 语句时,PDO 可以返回数据库中的行数吗?php 甚至支持命名参数吗?

4

4 回答 4

1

使用 SELECT 语句时,PDO 可以返回数据库中的行数吗?

我想混乱源于手册中的这句话:

如果关联 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序。

http://php.net/manual/en/pdostatement.rowcount.php

支持或不支持此功能的是数据库。当您发出一个SELECT * FROM foo ...语句时,您是在告诉数据库您想要获取foo表中的所有数据 [根据某些条件]。这里的重点是数据。数据库将评估它为该表提供的所有数据,以将您要求的内容返回给您。某些索引可能会或可能不会帮助,这可能会或可能不会异步发生,数据库可能知道也可能不知道它能够提供多少结果。这一切都取决于数据库的内部结构。在某些形式的存储中,数据库在实际获取所有结果之前可能根本不知道会有多少结果。

因此,当您调用时PDOStatement::rowCount,结果可能准确也可能不准确,具体取决于数据库。PDO API 仅公开数据库提供的任何内容,并且由于 PDO 可用于与许多不同的数据库通信,因此它的功能取决于您正在与哪个数据库通信。

php 甚至支持命名参数吗?

php?!是的,PHP 有许多支持使用命名参数的参数化查询的数据库 API 。PDO就是其中之一。

于 2013-08-07T06:45:24.910 回答
1

使用 SELECT 语句时,PDO 可以返回数据库中的行数吗?

从 db 中选择任何数据都没有限制。
PDO 可以返回表中的行数以及您可能希望从数据库中选择的任何其他信息。只需选择它。你会毫无问题地拥有。就这样。

于 2013-08-07T05:20:08.430 回答
0

以下示例显示如何获取在 PDO 中选择或影响的行:

<?php
    $selectsql = $database->prepare('SELECT * FROM table');
    $selectsql->execute();
    $count = $selectsql->rowCount();
?>

或者

<?php
    $selectsql = $database->prepare('SELECT COUNT(*) FROM table');
    $selectsql->execute();
?>

关于命名参数

https://wiki.php.net/rfc/namedparameters

命名参数是多年来被多次提出的话题。各种电子邮件中都记录了优缺点,并且(显然)该功能尚未获得支持且未实施。由于该主题不断被重新提出,并且现在 PHP 有一个 RFC 流程,因此讨论应该记录在 RFC 中(注意这还没有完成),因此不必重新讨论相同的论点。

但是,我确实找到了一些模拟它的方法:

模拟 PHP 命名参数

PHP 和缺少命名参数

于 2013-08-07T04:45:19.783 回答
0

使用 MySQL 驱动时,这些代码是等价的

// using rowcount
$stmt = $pdo->prepare('SELECT * from `foo` WHERE `bar` = :bar');
$stmt->execute(array('bar' => 'bar'));
$count = $stmt->rowCount();

// using a COUNT query
$stmt = $pdo->prepare('SELECT COUNT(1) from `foo` WHERE `bar` = :bar');
$bar = 'bar';
$stmt->bindParam('bar', $bar);
$stmt->execute();
$count = $stmt->fetchColumn();

我还说明了在查询中使用命名占位符(这是完全可能的)。

第一段代码很可能不适用于另一个 DBMS,而第二段代码则可以。

于 2013-08-07T05:45:20.723 回答