123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- <?php
- /** File PDO.class.php *
- * Porting of native PHP 5.1 PDO *
- * object usable with PHP 4.X.X *
- * and PHP 5.0.X version. *
- * ------------------------------------ *
- *(C) Andrea Giammarchi [2005/10/19] *
- * ____________________________________ */
- // check and preserve native PDO driver, for PHP4 or PHP 5.0 users
- if(!class_exists('PDO')) {
- // SUPPORTED STATIC ENVIROMENT VARIABLES
- define('PDO_ATTR_SERVER_VERSION', 4); // server version
- define('PDO_ATTR_CLIENT_VERSION', 5); // client version
- define('PDO_ATTR_SERVER_INFO', 6); // server informations
- define('PDO_ATTR_PERSISTENT', 12); // connection mode, persistent or normal
- // SUPPORTED STATIC PDO FETCH MODE VARIABLES
- define('PDO_FETCH_ASSOC', 2); // such mysql_fetch_assoc
- define('PDO_FETCH_NUM', 3); // such mysql_fetch_row
- define('PDO_FETCH_BOTH', 4); // such mysql_fetch_array
- define('PDO_FETCH_OBJ', 5); // such mysql_fetch_object
- // UNSUPPORTED STATIC PDO FETCH MODE VARIABLES
- define('PDO_FETCH_LAZY', 1); // usable but not supported, default is PDO_FETCH_BOTH and will be used
- define('PDO_FETCH_BOUND', 6); // usable but not supported, default is PDO_FETCH_BOTH and will be used
- /**
- * Class PDO
- * PostgreSQL, SQLITE and MYSQL PDO support for PHP 4.X.X or PHP 5.0.X users, compatible with PHP 5.1.0 (RC1).
- *
- * DESCRIPTION [directly from http://us2.php.net/manual/en/ref.pdo.php]
- * The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.
- * Each database driver that implements the PDO interface can expose database-specific features as regular extension functions.
- * Note that you cannot perform any database functions using the PDO extension by itself;
- * you must use a database-specific PDO driver to access a database server.
- *
- * HOW TO USE
- * To know how to use PDO driver and all its methods visit php.net wonderful documentation.
- * http://us2.php.net/manual/en/ref.pdo.php
- * In this class some methods are not available and actually this porting is only for MySQL, SQLITE and PostgreSQL.
- *
- * LIMITS
- * For some reasons ( time and php used version with this class ) some PDO methods are not availables and
- * someother are not totally supported.
- *
- * PDO :: UNSUPPORTED METHODS:
- * - beginTransaction [ mysql 3 has not transaction and manage them is possible only with a direct BEGIN
- * or COMMIT query ]
- * - commit
- * - rollback
- *
- * PDO :: NOT TOTALLY SUPPORTED METHODS:
- * - getAttribute [ accepts only PDO_ATTR_SERVER_INFO, PDO_ATTR_SERVER_VERSION,
- * PDO_ATTR_CLIENT_VERSION and PDO_ATTR_PERSISTENT attributes ]
- * - setAttribute [ supports only PDO_ATTR_PERSISTENT modification ]
- * - lastInsertId [ only fo PostgreSQL , returns only pg_last_oid ]
- *
- * - - - - - - - - - - - - - - - - - - - -
- *
- * PDOStatement :: UNSUPPORTED METHODS:
- * - bindColumn [ is not possible to undeclare a variable and using global scope is not
- * really a good idea ]
- *
- * PDOStatement :: NOT TOTALLY SUPPORTED METHODS:
- * - getAttribute [ accepts only PDO_ATTR_SERVER_INFO, PDO_ATTR_SERVER_VERSION,
- * PDO_ATTR_CLIENT_VERSION and PDO_ATTR_PERSISTENT attributes ]
- * - setAttribute [ supports only PDO_ATTR_PERSISTENT modification ]
- * - setFetchMode [ supports only PDO_FETCH_NUM, PDO_FETCH_ASSOC, PDO_FETCH_OBJ and
- * PDO_FETCH_BOTH database reading mode ]
- * ---------------------------------------------
- * @Compatibility >= PHP 4
- * @Dependencies PDO_mysql.class.php
- * PDO_sqlite.class.php
- * PDOStatement_mysql.class.php
- * PDOStatement_sqlite.class.php
- * @Author Andrea Giammarchi
- * @Site http://www.devpro.it/
- * @Mail andrea [ at ] 3site [ dot ] it
- * @Date 2005/10/13
- * @LastModified 2005/12/01 21:40
- * @Version 0.1b - tested, supports only PostgreSQL, MySQL or SQLITE databases
- */
- class PDO {
- /** Modified on 2005/12/01 to support new PDO constants on PHP 5.1.X */
- const FETCH_ASSOC = PDO_FETCH_ASSOC;
- const FETCH_NUM = PDO_FETCH_NUM;
- const FETCH_BOTH = PDO_FETCH_BOTH;
- const FETCH_OBJ = PDO_FETCH_OBJ;
- const FETCH_LAZY = PDO_FETCH_LAZY;
- const FETCH_BOUND = PDO_FETCH_BOUND;
- const ATTR_SERVER_VERSION = PDO_ATTR_SERVER_VERSION;
- const ATTR_CLIENT_VERSION = PDO_ATTR_CLIENT_VERSION;
- const ATTR_SERVER_INFO = PDO_ATTR_SERVER_INFO;
- const ATTR_PERSISTENT = PDO_ATTR_PERSISTENT;
- /**
- * 'Private' variables:
- * __driver:PDO_* Dedicated PDO database class
- */
- var $__driver;
- /**
- * Public constructor
- * http://us2.php.net/manual/en/function.pdo-construct.php
- */
- function PDO($string_dsn, $string_username = '', $string_password = '', $array_driver_options = null) {
- $con = &$this->__getDNS($string_dsn);
- if($con['dbtype'] === 'mysql') {
- require_once('PDO_mysql.class.php');
- if(isset($con['port']))
- $con['host'] .= ':'.$con['port'];
- $this->__driver = new PDO_mysql(
- $con['host'],
- $con['dbname'],
- $string_username,
- $string_password
- );
- }
- elseif($con['dbtype'] === 'sqlite2' || $con['dbtype'] === 'sqlite') {
- require_once('PDO_sqlite.class.php');
- $this->__driver = new PDO_sqlite($con['dbname']);
- }
- elseif($con['dbtype'] === 'pgsql') {
- require_once('PDO_pgsql.class.php');
- $string_dsn = "host={$con['host']} dbname={$con['dbname']} user={$string_username} password={$string_password}";
- if(isset($con['port']))
- $string_dsn .= " port={$con['port']}";
- $this->__driver = new PDO_pgsql($string_dsn);
- }
- }
- /** UNSUPPORTED
- * Public method
- * http://us2.php.net/manual/en/function.pdo-begintransaction.php
- */
- function beginTransaction() {
- $this->__driver->beginTransaction();
- }
- /** NOT NATIVE BUT MAYBE USEFULL FOR PHP < 5.1 PDO DRIVER
- * Public method
- * Calls database_close function.
- * this->close( Void ):Boolean
- * @Return Boolean True on success, false otherwise
- */
- function close() {
- return $this->__driver->close();
- }
- /** UNSUPPORTED
- * Public method
- * http://us2.php.net/manual/en/function.pdo-commit.php
- */
- function commit() {
- $this->__driver->commit();
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-exec.php
- */
- function exec($query) {
- return $this->__driver->exec($query);
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-errorcode.php
- */
- function errorCode() {
- return $this->__driver->errorCode();
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-errorinfo.php
- */
- function errorInfo() {
- return $this->__driver->errorInfo();
- }
- /** NOT TOTALLY UNSUPPORTED
- * Public method
- * http://us2.php.net/manual/en/function.pdo-getattribute.php
- */
- function getAttribute($attribute) {
- return $this->__driver->getAttribute($attribute);
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-lastinsertid.php
- */
- function lastInsertId() {
- return $this->__driver->lastInsertId();
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-prepare.php
- */
- function prepare($query, $array = Array()) {
- return $this->__driver->prepare($query, $array = Array());
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-query.php
- */
- function query($query) {
- return $this->__driver->query($query);
- }
- /**
- * Public method
- * http://us2.php.net/manual/en/function.pdo-quote.php
- */
- function quote($string) {
- return $this->__driver->quote($string);
- }
- /** UNSUPPORTED
- * Public method
- * http://us2.php.net/manual/en/function.pdo-rollback.php
- */
- function rollBack() {
- $this->__driver->rollBack();
- }
- /** NOT TOTALLY UNSUPPORTED
- * Public method
- * http://us2.php.net/manual/en/function.pdo-setattribute.php
- */
- function setAttribute($attribute, $mixed) {
- return $this->__driver->setAttribute($attribute, $mixed);
- }
- // PRIVATE METHOD [uncommented]
- function __getDNS(&$string) {
- $result = array();
- $pos = strpos($string, ':');
- $parameters = explode(';', substr($string, ($pos + 1)));
- $result['dbtype'] = strtolower(substr($string, 0, $pos));
- for($a = 0, $b = count($parameters); $a < $b; $a++) {
- $tmp = explode('=', $parameters[$a]);
- if(count($tmp) == 2)
- $result[$tmp[0]] = $tmp[1];
- else
- $result['dbname'] = $parameters[$a];
- }
- return $result;
- }
- }
- }
- // If you have PHP 5.1 but want to test this class, declare PDO variables as _PDO variables
- else {
- /**
- * Class _PDO
- * (C) Andrea Giammarchi
- * Please read PDO class comments to know more
- */
- class _PDO {
- const FETCH_ASSOC = PDO::FETCH_ASSOC;
- const FETCH_NUM = PDO::FETCH_NUM;
- const FETCH_BOTH = PDO::FETCH_BOTH;
- const FETCH_OBJ = PDO::FETCH_OBJ;
- const FETCH_LAZY = PDO::FETCH_LAZY;
- const FETCH_BOUND = PDO::FETCH_BOUND;
- const ATTR_SERVER_VERSION = PDO::ATTR_SERVER_VERSION;
- const ATTR_CLIENT_VERSION = PDO::ATTR_CLIENT_VERSION;
- const ATTR_SERVER_INFO = PDO::ATTR_SERVER_INFO;
- const ATTR_PERSISTENT = PDO::ATTR_PERSISTENT;
- var $__driver;
- function _PDO($string_dsn, $string_username = '', $string_password = '', $array_driver_options = null) {
- $con = &$this->__getDNS($string_dsn);
- if($con['dbtype'] === 'mysql') {
- require_once('PDO_mysql.class.php');
- if(isset($con['port']))
- $con['host'] .= ':'.$con['port'];
- $this->__driver = new PDO_mysql(
- $con['host'],
- $con['dbname'],
- $string_username,
- $string_password
- );
- }
- elseif($con['dbtype'] === 'sqlite2' || $con['dbtype'] === 'sqlite') {
- require_once('PDO_sqlite.class.php');
- $this->__driver = new PDO_sqlite($con['dbname']);
- }
- elseif($con['dbtype'] === 'pgsql') {
- require_once('PDO_pgsql.class.php');
- $string_dsn = "host={$con['host']} dbname={$con['dbname']} user={$string_username} password={$string_password}";
- if(isset($con['port']))
- $string_dsn .= " port={$con['port']}";
- $this->__driver = new PDO_pgsql($string_dsn);
- }
- }
- function beginTransaction() {
- $this->__driver->beginTransaction();
- }
- function close() {
- return $this->__driver->close();
- }
- function commit() {
- $this->__driver->commit();
- }
- function exec($query) {
- return $this->__driver->exec($query);
- }
- function errorCode() {
- return $this->__driver->errorCode();
- }
- function errorInfo() {
- return $this->__driver->errorInfo();
- }
- function getAttribute($attribute) {
- return $this->__driver->getAttribute($attribute);
- }
- function lastInsertId() {
- return $this->__driver->lastInsertId();
- }
- function prepare($query, $array = Array()) {
- return $this->__driver->prepare($query, $array = Array());
- }
- function query($query) {
- return $this->__driver->query($query);
- }
- function quote($string) {
- return $this->__driver->quote($string);
- }
- function rollBack() {
- $this->__driver->rollBack();
- }
- function setAttribute($attribute, $mixed) {
- return $this->__driver->setAttribute($attribute, $mixed);
- }
- function __getDNS(&$string) {
- $result = array();
- $pos = strpos($string, ':');
- $parameters = explode(';', substr($string, ($pos + 1)));
- $result['dbtype'] = strtolower(substr($string, 0, $pos));
- for($a = 0, $b = count($parameters); $a < $b; $a++) {
- $tmp = explode('=', $parameters[$a]);
- if(count($tmp) == 2)
- $result[$tmp[0]] = $tmp[1];
- else
- $result['dbname'] = $parameters[$a];
- }
- return $result;
- }
- }
- }
- ?>
|