• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-24) 16次浏览 已收录 0个评论

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

本帖最后由 rainxies 于 2013-03-11 10:202本文来源gao*daima.com搞@代#码&网6

搞gaodaima代码

:33 编辑

我看到到处都有这段代码,但没有一个地方告诉有什么用?怎么使用?

<br />	class Database extends PDO<br />	{<br />	    function __construct()<br />	    {<br />	        parent::__construct('mysql:dbname=test;host=localhost', 'root', '');<br />	        $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));<br />	    }<br />	}<br />	<br />	class DBStatement extends PDOStatement<br />	{<br />	    public $dbh;<br />	<br />	    protected function __construct($dbh)<br />	    {<br />	        $this->dbh = $dbh;<br />	        $this->setFetchMode(PDO::FETCH_OBJ);<br />	    }<br />	    <br />	    public function foundRows()<br />	    {<br />	        $rows = $this->dbh->prepare('SELECT found_rows() AS rows', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE));<br />	        $rows->execute();<br />	        $rowsCount = $rows->fetch(PDO::FETCH_OBJ)->rows;<br />	        $rows->closeCursor();<br />	        return $rowsCount;<br />	    }<br />	}<br />

我的理解是实现了查询完成后,再调用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 并不能假定每个人都会将数值型数据用引号括起来


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:“class DBStatement extends PDOStatement” 是否可以在查询的时候,返回原始行数

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址