ホームページ  >  記事  >  バックエンド開発  >  "class DBStatement extends PDOStatement" クエリ中に元の行数を返すことができるかどうか

"class DBStatement extends PDOStatement" クエリ中に元の行数を返すことができるかどうか

WBOY
WBOYオリジナル
2016-06-13 12:52:10831ブラウズ

「class DBStatement extends PDOStatement」はクエリ時に元の行数を返すことができますか?

この投稿は、rainxies によって最終編集されました: 2013-03-11 10:20: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;

同じクエリが 2 回実行されます
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
この tbl_name からの削除が実行された場合、その結果は想像できます
ですが
select * from tbl_name where id='$id'
これは防ぐことができます。
しかし、PHP は誰もが数値データを引用符で囲むことを想定できません


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。