📄 db2.php
字号:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to version 1.0 of the Zend Framework * license, that is bundled with this package in the file LICENSE.txt, and * is available through the world-wide-web at the following URL: * http://framework.zend.com/license/new-bsd. If you did not receive * a copy of the Zend Framework license and are unable to obtain it * through the world-wide-web, please send a note to license@zend.com * so we can mail you a copy immediately. * * @package Zend_Db * @subpackage Adapter * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * *//** * @see Zend_Db */require_once 'Zend/Db.php';/** * @see Zend_Db_Adapter_Abstract */require_once 'Zend/Db/Adapter/Abstract.php';/** * @see Zend_Db_Statement_Db2 */require_once 'Zend/Db/Statement/Db2.php';/** * @package Zend_Db * @copyright Copyright (c) 2005-2008 Zend Technologies Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @author Joscha Feth <jffeth@de.ibm.com> * @author Salvador Ledezma <ledezma@us.ibm.com> */class Zend_Db_Adapter_Db2 extends Zend_Db_Adapter_Abstract{ /** * User-provided configuration. * * Basic keys are: * * username => (string) Connect to the database as this username. * password => (string) Password associated with the username. * host => (string) What host to connect to (default 127.0.0.1) * dbname => (string) The name of the database to user * protocol => (string) Protocol to use, defaults to "TCPIP" * port => (integer) Port number to use for TCP/IP if protocol is "TCPIP" * persistent => (boolean) Set TRUE to use a persistent connection (db2_pconnect) * * @var array */ protected $_config = array( 'dbname' => null, 'username' => null, 'password' => null, 'host' => 'localhost', 'port' => '50000', 'protocol' => 'TCPIP', 'persistent' => false ); /** * Execution mode * * @var int execution flag (DB2_AUTOCOMMIT_ON or DB2_AUTOCOMMIT_OFF) */ protected $_execute_mode = DB2_AUTOCOMMIT_ON; /** * Keys are UPPERCASE SQL datatypes or the constants * Zend_Db::INT_TYPE, Zend_Db::BIGINT_TYPE, or Zend_Db::FLOAT_TYPE. * * Values are: * 0 = 32-bit integer * 1 = 64-bit integer * 2 = float or decimal * * @var array Associative array of datatypes to values 0, 1, or 2. */ protected $_numericDataTypes = array( Zend_Db::INT_TYPE => Zend_Db::INT_TYPE, Zend_Db::BIGINT_TYPE => Zend_Db::BIGINT_TYPE, Zend_Db::FLOAT_TYPE => Zend_Db::FLOAT_TYPE, 'INTEGER' => Zend_Db::INT_TYPE, 'SMALLINT' => Zend_Db::INT_TYPE, 'BIGINT' => Zend_Db::BIGINT_TYPE, 'DECIMAL' => Zend_Db::FLOAT_TYPE, 'NUMERIC' => Zend_Db::FLOAT_TYPE ); /** * Creates a connection resource. * * @return void */ protected function _connect() { if (is_resource($this->_connection)) { // connection already exists return; } if (!extension_loaded('ibm_db2')) { /** * @see Zend_Db_Adapter_Db2_Exception */ require_once 'Zend/Db/Adapter/Db2/Exception.php'; throw new Zend_Db_Adapter_Db2_Exception('The IBM DB2 extension is required for this adapter but the extension is not loaded'); } if ($this->_config['persistent']) { // use persistent connection $conn_func_name = 'db2_pconnect'; } else { // use "normal" connection $conn_func_name = 'db2_connect'; } if (!isset($this->_config['driver_options']['autocommit'])) { // set execution mode $this->_config['driver_options']['autocommit'] = &$this->_execute_mode; } if (isset($this->_config['options'][Zend_Db::CASE_FOLDING])) { $caseAttrMap = array( Zend_Db::CASE_NATURAL => DB2_CASE_NATURAL, Zend_Db::CASE_UPPER => DB2_CASE_UPPER, Zend_Db::CASE_LOWER => DB2_CASE_LOWER ); $this->_config['driver_options']['DB2_ATTR_CASE'] = $caseAttrMap[$this->_config['options'][Zend_Db::CASE_FOLDING]]; } if ($this->_config['host'] !== 'localhost') { // if the host isn't localhost, use extended connection params $dbname = 'DRIVER={IBM DB2 ODBC DRIVER}' . ';DATABASE=' . $this->_config['dbname'] . ';HOSTNAME=' . $this->_config['host'] . ';PORT=' . $this->_config['port'] . ';PROTOCOL=' . $this->_config['protocol'] . ';UID=' . $this->_config['username'] . ';PWD=' . $this->_config['password'] .';'; $this->_connection = $conn_func_name( $dbname, null, null, $this->_config['driver_options'] ); } else { // host is localhost, so use standard connection params $this->_connection = $conn_func_name( $this->_config['dbname'], $this->_config['username'], $this->_config['password'], $this->_config['driver_options'] ); } // check the connection if (!$this->_connection) { /** * @see Zend_Db_Adapter_Db2_Exception */ require_once 'Zend/Db/Adapter/Db2/Exception.php'; throw new Zend_Db_Adapter_Db2_Exception(db2_conn_errormsg(), db2_conn_error()); } } /** * Force the connection to close. * * @return void */ public function closeConnection() { db2_close($this->_connection); $this->_connection = null; } /** * Returns an SQL statement for preparation. * * @param string $sql The SQL statement with placeholders. * @return Zend_Db_Statement_Db2 */ public function prepare($sql) { $this->_connect(); $stmt = new Zend_Db_Statement_Db2($this, $sql); $stmt->setFetchMode($this->_fetchMode); return $stmt; } /** * Gets the execution mode * * @return int the execution mode (DB2_AUTOCOMMIT_ON or DB2_AUTOCOMMIT_OFF) */ public function _getExecuteMode() { return $this->_execute_mode; } /** * @param integer $mode * @return void */ public function _setExecuteMode($mode) { switch ($mode) { case DB2_AUTOCOMMIT_OFF: case DB2_AUTOCOMMIT_ON: $this->_execute_mode = $mode; db2_autocommit($this->_connection, $mode); break; default: /** * @see Zend_Db_Adapter_Db2_Exception */ require_once 'Zend/Db/Adapter/Db2/Exception.php'; throw new Zend_Db_Adapter_Db2_Exception("execution mode not supported"); break; } } /** * Quote a raw string. * * @param string $value Raw string * @return string Quoted string */ protected function _quote($value) { if (is_int($value) || is_float($value)) { return $value; } /** * Use db2_escape_string() if it is present in the IBM DB2 extension. * But some supported versions of PHP do not include this function, * so fall back to default quoting in the parent class. */ if (function_exists('db2_escape_string')) { return "'" . db2_escape_string($value) . "'"; } return parent::_quote($value); } /** * @return string */ public function getQuoteIdentifierSymbol() { $this->_connect(); $info = db2_server_info($this->_connection); $identQuote = $info->IDENTIFIER_QUOTE_CHAR; return $identQuote; } /** * Returns a list of the tables in the database. * * @return array */ public function listTables() { $this->_connect(); // take the most general case and assume no z/OS // since listTables() takes no parameters $stmt = db2_tables($this->_connection); $tables = array(); while ($row = db2_fetch_assoc($stmt)) { $tables[] = $row['TABLE_NAME']; } return $tables; } /** * Returns the column descriptions for a table. * * The return value is an associative array keyed by the column name, * as returned by the RDBMS. * * The value of each array element is an associative array * with the following keys: * * SCHEMA_NAME => string; name of database or schema * TABLE_NAME => string; * COLUMN_NAME => string; column name * COLUMN_POSITION => number; ordinal position of column in table * DATA_TYPE => string; SQL datatype name of column * DEFAULT => string; default expression of column, null if none * NULLABLE => boolean; true if column can have nulls * LENGTH => number; length of CHAR/VARCHAR * SCALE => number; scale of NUMERIC/DECIMAL * PRECISION => number; precision of NUMERIC/DECIMAL * UNSIGNED => boolean; unsigned property of an integer type
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -