PDO和select语句有哪些限制

时间:2013-08-07 04:32:29

标签: php pdo named-parameters

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

4 个答案:

答案 0 :(得分:1)

  

使用SELECT staement时,PDO能否返回db中的行数?

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

答案 1 :(得分:1)

  

使用SELECT staement时,PDO能否返回db中的行数?

我认为混淆源于手册中的这句话:

  

如果关联的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就是其中之一。

答案 2 :(得分:0)

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

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

OR

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

关于命名参数

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

  

命名参数是多年来多次提出的主题。利弊被捕获在各种电子邮件和   (显然)该功能尚未得到支持而未实施。   由于该主题不断被重新提出,现在PHP有一个RFC   过程中,讨论应该记录在RFC中(注意这还是   要做到这一点,所以不必重新审视相同的论点。

然而,我确实找到了模拟它的方法:

Simulating PHP Named Parameters

PHP and the lack of Named Parameters

答案 3 :(得分: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一起工作,而第二段则会。