Movatterモバイル変換


[0]ホーム

URL:


update page now
    Einführung »
    « odbc_tables

    PHP Data Objects

    Found A Problem?

    Learn How To Improve This PageSubmit a Pull RequestReport a Bug
    add a note

    User Contributed Notes5 notes

    119
    djlopez at gmx dot de
    19 years ago
    Please note this:Won't work:$sth = $dbh->prepare('SELECT name, colour, calories FROM ?  WHERE calories < ?');THIS WORKS!$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ?');The parameter cannot be applied on table names!!
    www.navin.biz
    20 years ago
    Below is an example of extending PDO & PDOStatement classes:<?phpclassDatabaseextendsPDO{    function__construct()    {parent::__construct('mysql:dbname=test;host=localhost','root','');$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));    }}classDBStatementextendsPDOStatement{    public$dbh;    protected function__construct($dbh)    {$this->dbh=$dbh;$this->setFetchMode(PDO::FETCH_OBJ);    }        public functionfoundRows()    {$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;    }}?>
    pokojny at radlight dot com
    19 years ago
    I wanted to extend PDO class to store statistics of DB usage, and I faced some problems. I wanted to count number of created statements and number of their executings. So PDOStatement should have link to PDO that created it and stores the statistical info. The problem was that I didn't knew how PDO creates PDOStatement (constructor parameters and so on), so I have created these two classes:<?php/** * PHP Document Object plus *  * PHP Document Object plus is library with functionality of PDO, entirely written * in PHP, so that developer can easily extend it's classes with specific functionality, * such as providing database usage statistics implemented in v1.0b *  * @author Peter Pokojny * @licensehttp://opensource.org/licenses/gpl-license.php GNU Public License */classPDOp{        protected$PDO;        public$numExecutes;        public$numStatements;        public function__construct($dsn,$user=NULL,$pass=NULL,$driver_options=NULL) {$this->PDO= newPDO($dsn,$user,$pass,$driver_options);$this->numExecutes=0;$this->numStatements=0;        }        public function__call($func,$args) {            returncall_user_func_array(array(&$this->PDO,$func),$args);        }        public functionprepare() {$this->numStatements++;$args=func_get_args();$PDOS=call_user_func_array(array(&$this->PDO,'prepare'),$args);                        return newPDOpStatement($this,$PDOS);        }        public functionquery() {$this->numExecutes++;$this->numStatements++;$args=func_get_args();$PDOS=call_user_func_array(array(&$this->PDO,'query'),$args);                        return newPDOpStatement($this,$PDOS);        }        public functionexec() {$this->numExecutes++;$args=func_get_args();            returncall_user_func_array(array(&$this->PDO,'exec'),$args);        }    }    classPDOpStatementimplementsIteratorAggregate{        protected$PDOS;        protected$PDOp;        public function__construct($PDOp,$PDOS) {$this->PDOp=$PDOp;$this->PDOS=$PDOS;        }        public function__call($func,$args) {            returncall_user_func_array(array(&$this->PDOS,$func),$args);        }        public functionbindColumn($column, &$param,$type=NULL) {            if ($type===NULL)$this->PDOS->bindColumn($column,$param);            else$this->PDOS->bindColumn($column,$param,$type);        }        public functionbindParam($column, &$param,$type=NULL) {            if ($type===NULL)$this->PDOS->bindParam($column,$param);            else$this->PDOS->bindParam($column,$param,$type);        }        public functionexecute() {$this->PDOp->numExecutes++;$args=func_get_args();            returncall_user_func_array(array(&$this->PDOS,'execute'),$args);        }        public function__get($property) {            return$this->PDOS->$property;        }        public functiongetIterator() {            return$this->PDOS;        }   }?>Classes have properties with original PDO and PDOStatement objects, which are providing the functionality to PDOp and PDOpStatement.From outside, PDOp and PDOpStatement look like PDO and PDOStatement, but also are providing wanted info.
    wiserufferto at gmail dot com
    5 years ago
    This is a little late... but I'm old and slow.......Regarding Extending PDOStatement and PDO I found that sending the PDOExtended class by reference helps:    In the constructor after parent::__construct() :$this->setAttribute(\PDO::ATTR_STATEMENT_CLASS,array('PDOStatementExtended', [&$this]));}And in class PDOStatementExtended extends \PDOStatement{    protected function __construct  (    \PDO &$PDO,   )
    dougwilbourne at gmail dot com
    1 year ago
    Now that current versions of MySQL are forcing users to authenticate with caching_sha2_password instead of mysql_native_driver, I wanted to get PDO to send passwords that way.  I think the only way to do it is to make the connection over SSL. Setting up your web server and database server for SSL is way beyond the scope of this note, but after you do, remember that you will need to add an options array as the last argument in your PDO connection arguments.  At a minimum, you will need to supply the server certificate.  In a development environment with a self-signed server certificate, you will also want to bypass verification that your server certificate is 'real'.  So your options array would look like this$opts = [ PDO::MYSQL_ATTR_SSL_CA => $server_cert_file_path, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false];Hope it helps!
    add a note
    To Top
    and to navigate •Enter to select •Esc to close •/ to open
    PressEnter without selection to search using Google

    [8]ページ先頭

    ©2009-2026 Movatter.jp