PHP PDO选择查询结果

PHP PDO Select Query Results

这似乎应该是一个非常简单的任务,但我不确定是不是。

我想使用PDO进行SELECT查询,然后在查找是否有任何结果(行)以及是否有结果之后立即进行查询。

我想将结果作为对象而不是数组来获取,因为我喜欢$ obj-> col_name语法,并且返回数组只是为了找到上面的内容,这感觉有点不对。

1
$qryh = $conn->query("SELECT ...");

然后使用$qryh首先确定是否有任何行,以及是否有多少行。

可以做到这一点而又不依赖使用数组吗?。

更新:

我了解rowCount(),但是我认为它仅适用于UPDATE,INSERT和DELETE-我的问题与SELECT有关。

更新2:

我正在使用SQL Server和MS Access,而不是MySQL,并且rocount()无法正常工作。

发现的解决方案

被接受的答案导致了解决方案。这是我发现的:

在创建PDO对象(new PDO(...)时,我将PDO::ATTR_CURSOR选项设置为PDO::CURSOR_SCROLL,该对象在rowCount()上返回了-1。但是,如果我使用数组(array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL))将光标设置在->prepare(...内,则它将起作用并返回行数。

http://technet.microsoft.com/zh-cn/library/ff628154(v = sql.105).aspx

因此,上述链接上的示例有效,创建PDO对象时设置光标无效。另请注意,在以上链接的"备注"部分中,它提到了PDO::CURSOR_SCROLLABLE,这对我不适用(我得到了Undefined class constant 'CURSOR_SCROLLABLE')。


尝试这种方式:

1
2
3
4
$query ="select * from ...";
$stmt = $conn->prepare( $query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
print $stmt->rowCount()

应该工作


1
2
3
4
5
6
7
8
9
$stmt = $conn->query('SELECT ...');
// number of rows:
$rows = $stmt->rowCount();

// get an array with objects:
$objects = $stmt->fetchAll();

// another way to count the results:
$rows = count($objects);


您是对的,PDO::rowCount与SELECT

不能正常工作

一种解决方法是将计数添加到您的查询中

1
2
3
$qryh = $conn->query("SELECT COUNT(*) as numRows FROM Table");
$result = $qryh->(PDO::FETCH_OBJ);;
$count = $result->numRows;

这是我在数据库类中所做的:

1
2
3
4
5
6
$stmt = $conn->prepare('SELECT ...');
$stmt->execute();

$arrayOfObjects = $stmt->fetchALL(PDO::FETCH_OBJ);
$numberOfRows = count($arrayOfObjects);
print $numberOfRows;

通过传递PDO::FETCH_OBJ,每个对象都是一个stdClass,这意味着您可以使用->语法。

我相信这就是您要寻找的东西,它只是使用PHP count()函数而不是mySQL rowCount()

如果您想获得更多上下文,这是我在所有项目中使用的DB类:https://gist.github.com/pxlsqre/9f6471220ef187343f54


1
$qryh->fetchColumn()

返回通过SELECT查询选择的行数