您好,欢迎访问一九零五行业门户网

“class DBStatement extends PDOStatement” 是否可以在查询的时候,返回原始行数

“class dbstatement extends pdostatement” 是不是可以在查询的时候,返回原始行数?
本帖最后由 rainxies 于 2013-03-11 10:20:33 编辑 我看到到处都有这段代码,但没有一个地方告诉有什么用?怎么使用?
class database extends pdo
{
function __construct()
{
parent::__construct('mysql:dbname=test;host=localhost', 'root', '');
$this->setattribute(pdo::attr_statement_class, array('dbstatement', array($this)));
}
}
class dbstatement extends pdostatement
{
public $dbh;
protected function __construct($dbh)
{
$this->dbh = $dbh;
$this->setfetchmode(pdo::fetch_obj);
}
public function foundrows()
{
$rows = $this->dbh->prepare('select found_rows() as rows', array(pdo::mysql_attr_use_buffered_query => true));
$rows->execute();
$rowscount = $rows->fetch(pdo::fetch_obj)->rows;
$rows->closecursor();
return $rowscount;
}
}

我的理解是实现了查询完成后,再调用foundrows可以返回原始记录集行数
可以避免分页时要执行2个sql的问题(select count;select * )
不知是不是这样?
如果是,该如何调用啊?
请大虾们不吝赐教啊!!!感激涕零!!!
------解决方案--------------------
不要钻牛角尖
select sql_calc_found_rows * from tbl_name limit 10;
select found_rows();

select count(*) from tbl_name
select sql_calc_found_rows * from tbl_name limit 10;
同样是执行两次查询
在有 where 子句时,前者的效率要比后者高
php 的数据库函数不允许一次执行多条 sql 指令,是为了防范 sql攻击
比如($id 传入参数)
select * from tbl_name where id=$id
当$id = '1;delete from tbl_name';时,查询串变成
select * from tbl_name where id=1;delete from tbl_name
如果这个 delete from tbl_name 被执行的话,后果就可想而知了
虽然
select * from tbl_name where id='$id'
就可以防止这种情况的发生。
但是 php 并不能假定每个人都会将数值型数据用引号括起来
其它类似信息

推荐信息