“class DBStatement extends PDOStatement” 是否可以在查詢的時候,返回原始行數

來源:互聯網
上載者:User
“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 並不能假定每個人都會將數值型資料用引號括起來


  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.