PHP PDO Select Query Results
这似乎应该是一个非常简单的任务,但我不确定是不是。
我想使用PDO进行SELECT查询,然后在查找是否有任何结果(行)以及是否有结果之后立即进行查询。
我想将结果作为对象而不是数组来获取,因为我喜欢$ obj-> col_name语法,并且返回数组只是为了找到上面的内容,这感觉有点不对。
1 | $qryh = $conn->query("SELECT ..."); |
然后使用
可以做到这一点而又不依赖使用数组吗?。
更新:
我了解
更新2:
我正在使用SQL Server和MS Access,而不是MySQL,并且rocount()无法正常工作。
发现的解决方案
被接受的答案导致了解决方案。这是我发现的:
在创建PDO对象(
http://technet.microsoft.com/zh-cn/library/ff628154(v = sql.105).aspx
因此,上述链接上的示例有效,创建PDO对象时设置光标无效。另请注意,在以上链接的"备注"部分中,它提到了
尝试这种方式:
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); |
您是对的,
不能正常工作
一种解决方法是将计数添加到您的查询中
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; |
通过传递
我相信这就是您要寻找的东西,它只是使用PHP
如果您想获得更多上下文,这是我在所有项目中使用的DB类:https://gist.github.com/pxlsqre/9f6471220ef187343f54
1 | $qryh->fetchColumn() |
返回通过SELECT查询选择的行数