Inheritance: extends Zend_Db_Adapter_Abstract
Example #1
0
 function testInsert()
 {
     $row = array('title' => 'News Item 3', 'subTitle' => 'Sub title 3', 'body' => 'This is body 1', 'date_created' => '2006-05-03 13:13:13');
     $rows_affected = $this->_db->insert(self::TableName, $row);
     $last_insert_id = $this->_db->lastInsertId();
     $this->assertEquals('3', (string) $last_insert_id);
     // correct id has been set
 }
Example #2
0
 /**
  * @return void
  */
 protected function _connect()
 {
     if ($this->_connection) {
         return;
     }
     parent::_connect();
     $this->_connection->exec('SET QUOTED_IDENTIFIER ON');
 }
 /**
  * 执行SQL语句
  * 
  * @param string|Zend_Db_Select $sql
  * @param boolean $commit
  * @return integer
  */
 protected function _exec($sql, $commit = true)
 {
     $affected = $this->_db->exec($sql);
     if ($commit) {
         $this->_db->exec('COMMIT');
     }
     return $affected;
 }
Example #4
0
 /**
  * Constructor.
  *
  * $config is an array of key/value pairs containing configuration
  * options.  Note that the SQLite options are different than most of
  * the other PDO adapters in that no username or password are needed.
  * Also, an extra config key "sqlite2" specifies compatibility mode.
  *
  * dbname    => (string) The name of the database to user (required,
  *                       use :memory: for memory-based database)
  *
  * sqlite2   => (boolean) PDO_SQLITE defaults to SQLite 3.  For compatibility
  *                        with an older SQLite 2 database, set this to TRUE.
  *
  * @param array $config An array of configuration keys.
  */
 public function __construct($config)
 {
     if (isset($config['sqlite2']) && $config['sqlite2']) {
         $this->_pdoType = 'sqlite2';
     }
     // SQLite uses no username/password.  Stub to satisfy parent::_connect()
     $this->_config['username'] = null;
     $this->_config['password'] = null;
     return parent::__construct($config);
 }
Example #5
0
 /**
  * Creates a PDO object and connects to the database.
  *
  * @return void
  * @throws Zend_Db_Adapter_Exception
  */
 protected function _connect()
 {
     if ($this->_connection) {
         return;
     }
     parent::_connect();
     if (!empty($this->_config['charset'])) {
         $sql = "SET NAMES '" . $this->_config['charset'] . "'";
         $this->_connection->exec($sql);
     }
 }
Example #6
0
 public function delete()
 {
     try {
         $this->db->delete($this->tableName, $this->primaryKeyName . " = " . $this->db->quote($this->primaryKeyValue));
         $this->primaryKeyValue = null;
     } catch (Zend_Db_Exception $e) {
         $this->errors[] = $this->localizer->translate("Database Error: %1\$s", $e->getMessage());
         return false;
     }
     return "delete";
 }
Example #7
0
 /**
  * Creates a PDO object and connects to the database.
  *
  * @return void
  * @throws Zend_Db_Adapter_Exception
  */
 protected function _connect()
 {
     if ($this->_connection) {
         return;
     }
     if (!empty($this->_config['charset'])) {
         $initCommand = "SET NAMES '" . $this->_config['charset'] . "'";
         $this->_config['driver_options'][PDO::MYSQL_ATTR_INIT_COMMAND] = $initCommand;
     }
     parent::_connect();
 }
Example #8
0
 /**
  * Creates a PDO object and connects to the database.
  *
  * @return void
  * @throws Zend_Db_Adapter_Exception
  */
 protected function _connect()
 {
     if ($this->_connection) {
         return;
     }
     if (!empty($this->_config['charset']) && version_compare(PHP_VERSION, '5.3.6', '<')) {
         $initCommand = "SET NAMES '" . $this->_config['charset'] . "'";
         $this->_config['driver_options'][1002] = $initCommand;
         // 1002 = PDO::MYSQL_ATTR_INIT_COMMAND
     }
     parent::_connect();
 }
 /**
  * Creates a PDO object and connects to the database.
  *
  * @return void
  * @throws Zend_Db_Adapter_Exception
  */
 protected function _connect()
 {
     if ($this->_connection) {
         return;
     }
     parent::_connect();
     /**
              * Mantis #0009452 - This feature was disable for making possible to enable transaction pooling
             if (!empty($this->_config['charset'])) {
                 $sql = "SET NAMES '" . $this->_config['charset'] . "'";
                 $this->_connection->exec($sql);
             }
             **/
 }
Example #10
0
 /**
  * Inserts a table row with specified data.
  * Special handling for PDO_IBM
  * remove empty slots
  *
  * @param mixed $table The table to insert data into.
  * @param array $bind Column-value pairs.
  * @return int The number of affected rows.
  */
 public function insert($table, array $bind)
 {
     $this->_connect();
     $newbind = array();
     if (is_array($bind)) {
         foreach ($bind as $name => $value) {
             if ($value !== null) {
                 $newbind[$name] = $value;
             }
         }
     }
     return parent::insert($table, $newbind);
 }
Example #11
0
 /**
  * Special configuration for SQLite behavior: make sure that result sets
  * contain keys like 'column' instead of 'table.column'.
  *
  * @throws Zend_Db_Adapter_Exception
  */
 protected function _connect()
 {
     /**
      * if we already have a PDO object, no need to re-connect.
      */
     if ($this->_connection) {
         return;
     }
     parent::_connect();
     $retval = $this->_connection->exec('PRAGMA full_column_names=0');
     if ($retval === false) {
         $error = $this->_connection->errorInfo();
         /** @see Zend_Db_Adapter_Exception */
         require_once 'Zend/Db/Adapter/Exception.php';
         throw new Zend_Db_Adapter_Exception($error[2]);
     }
     $retval = $this->_connection->exec('PRAGMA short_column_names=1');
     if ($retval === false) {
         $error = $this->_connection->errorInfo();
         /** @see Zend_Db_Adapter_Exception */
         require_once 'Zend/Db/Adapter/Exception.php';
         throw new Zend_Db_Adapter_Exception($error[2]);
     }
 }
Example #12
0
 /**
  * Return a list of all existing database tables
  *
  * @return  array
  */
 public function listTables()
 {
     $this->assertConnectedToDb();
     return $this->zendConn->listTables();
 }
Example #13
0
 /**
  *  Inserts a table row with specified data.
  *	Special handling for PDO_IBM
  * remove empty slots
  *
  * @param mixed $table The table to insert data into.
  * @param array $bind Column-value pairs.
  * @return int The number of affected rows.
  */
 public function insert($table, array $bind)
 {
     $newbind = array();
     if (is_array($bind)) {
         foreach ($bind as $name => $value) {
             if (!is_null($value)) {
                 $newbind[$name] = $value;
             }
         }
     }
     return parent::insert($table, $newbind);
 }
Example #14
0
 /**
  * Quote a raw string.
  *
  * @param string $value     Raw string
  * @return string           Quoted string
  */
 protected function _quote($value)
 {
     if (!is_int($value) && !is_float($value)) {
         // Fix for null-byte injection
         $value = addcslashes($value, "");
     }
     return parent::_quote($value);
 }
 public function _rollBack()
 {
     parent::_rollBack();
     /**
      * Auto-Commit must be tunerd on again after ending a transation.
      * This is the default behavior.
      */
     $this->getConnection()->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
 }
Example #16
0
 public function show()
 {
     $vars = array("name" => $this->name);
     //get data from DB
     $this->parseURLParameters();
     $totalPages = $totalRows = 0;
     $pagingEnabled = $this->pageSize > 0;
     $countSQLInMainSelect = false;
     if ($pagingEnabled) {
         //use direct count if there's no distinct inside of SELECT statement
         //that's 10 times faster than count loaded results
         $countSQLType = $this->countSQLType;
         if (!$countSQLType) {
             if (in_array(get_class($this->db), array('Zend_Db_Adapter_Mysqli', 'Zend_Db_Adapter_Pdo_Mysql'))) {
                 $countSQLType = "SQL_CALC_FOUND_ROWS";
             } elseif (preg_match("/\\s((distinct)|(group by))\\s/i", $this->selectSQL)) {
                 $countSQLType = "subselect";
             } else {
                 $countSQLType = "simple";
             }
         }
         switch ($countSQLType) {
             case 'SQL_CALC_FOUND_ROWS':
                 $countSQL = preg_replace("/(^\\s*)SELECT/smi", '$1SELECT SQL_CALC_FOUND_ROWS ', $this->selectSQL);
                 $countSQLInMainSelect = true;
                 break;
             case 'simple':
                 //SELECT.+\\sFROM is greedy to replace cases with multi selects
                 $countSQL = "SELECT COUNT(*) FROM " . preg_replace("/^\\s*SELECT.+\\sFROM\\s/smi", "", $this->selectSQL);
                 break;
             case 'subselect':
             default:
                 $countSQL = "select count(*) from (" . $this->selectSQL . ") a";
         }
         if (!$countSQLInMainSelect) {
             $totalRows = $this->db->fetchOne($countSQL);
             $totalPages = ceil($totalRows / $this->pageSize);
         } else {
             $totalRows = $this->page * $this->pageSize + 1;
             $totalPages = $this->page + 1;
         }
     }
     $sql = $countSQLInMainSelect ? $countSQL : $this->selectSQL;
     if ($this->sortOrder && array_key_exists($this->sortOrder, $this->sortOrders)) {
         if (is_array($this->sortOrders[$this->sortOrder])) {
             $sql .= " ORDER BY " . $this->sortOrders[$this->sortOrder][$this->sortDirection == "ASC" ? 0 : 1];
         } else {
             $sql .= " ORDER BY " . $this->sortOrders[$this->sortOrder] . ($this->sortDirection == "ASC" ? "" : " DESC");
         }
     } elseif ($this->defaultSortOrder) {
         $sql .= " ORDER BY " . $this->defaultSortOrder;
     }
     if ($totalPages == 0) {
         $this->page = 1;
     } elseif ($this->page > $totalPages) {
         $this->page = $totalPages;
     }
     if ($pagingEnabled) {
         $sql .= " LIMIT " . ($this->page - 1) * $this->pageSize . ", " . $this->pageSize;
     }
     $vars["rows"] = $this->db->fetchAll($sql);
     if (!$pagingEnabled) {
         $totalRows = count($vars["rows"]);
         $totalPages = ceil($totalRows / $this->pageSize);
     } elseif ($countSQLInMainSelect) {
         $totalRows = $this->db->fetchOne("SELECT  FOUND_ROWS()");
         $totalPages = ceil($totalRows / $this->pageSize);
     }
     $vars["totalRows"] = $totalRows;
     $vars["totalPages"] = $totalPages;
     //set URI for subcomponents(navigator, sorter)
     $params = $this->request->getParams();
     //remove empty variables
     foreach ($params as $name => $value) {
         if (empty($value) && $value !== "0") {
             unset($params[$name]);
         }
     }
     $params['controller'] = $this->request->getControllerName();
     $params['action'] = $this->request->getActionName();
     if (array_key_exists($this->name . 'Page', $params)) {
         unset($params[$this->name . 'Page']);
     }
     $vars["pagerURI"] = $this->actionController->getHelper('Url')->url($params, null, true) . '/';
     //remove sorter parameters
     if (array_key_exists($this->name . 'Order', $params)) {
         unset($params[$this->name . 'Order']);
     }
     if (array_key_exists($this->name . 'Dir', $params)) {
         unset($params[$this->name . 'Dir']);
     }
     $vars["sorterURI"] = $this->actionController->getHelper('Url')->url($params, null, true) . '/';
     $vars["page"] = $this->page;
     $vars["pageSize"] = $this->pageSize;
     $vars["sortOrder"] = $this->sortOrder;
     $vars["sortDirection"] = $this->sortDirection;
     $this->view->{$this->name} = $vars;
 }