From a120179e75ef7edbda6e54142a33292bd360fad9 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Wed, 3 Sep 2014 05:39:16 +0200 Subject: [PATCH 1/2] Don't create transactions for SELECT queries --- code/web/private_php/ams/autoload/dblayer.php | 75 ++++++++----------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/code/web/private_php/ams/autoload/dblayer.php b/code/web/private_php/ams/autoload/dblayer.php index 589a88e57..91d260fc3 100644 --- a/code/web/private_php/ams/autoload/dblayer.php +++ b/code/web/private_php/ams/autoload/dblayer.php @@ -135,13 +135,12 @@ class DBLayer { $sth -> execute(); $lastId = $this -> PDO -> lastInsertId(); $this -> PDO -> commit(); - } - catch ( Exception $e ) - { + } + catch ( Exception $e ) { // for rolling back the changes during transaction - $this -> PDO -> rollBack(); - throw new Exception( "error in inseting" ); - } + // $this -> PDO -> rollBack(); + throw $e; // new Exception( "error in inseting" ); + } return $lastId; } @@ -158,14 +157,11 @@ class DBLayer { public function selectWithParameter( $param, $tb_name, $data, $where ) { $this->useDb(); try { - $sth = $this -> PDO -> prepare( "SELECT $param FROM $tb_name WHERE $where" ); - $this -> PDO -> beginTransaction(); - $sth -> execute( $data ); - $this -> PDO -> commit(); + $sth = $this->PDO->prepare( "SELECT $param FROM $tb_name WHERE $where" ); + $sth->execute( $data ); } catch ( Exception $e ) { - $this -> PDO -> rollBack(); - throw new Exception( "error selection" ); + throw $e; // new Exception( "error selection" ); return false; } return $sth; @@ -180,22 +176,18 @@ class DBLayer { * @param string $where where to select in format('fieldname=:fieldname' AND ...). * @return statement object. */ - public function select( $tb_name, $data , $where ) { + public function select($tb_name, $data , $where) { $this->useDb(); try { - $sth = $this -> PDO -> prepare( "SELECT * FROM $tb_name WHERE $where" ); - $this -> PDO -> beginTransaction(); - $sth -> execute( $data ); - $this -> PDO -> commit(); - } - catch( Exception $e ) - { - $this -> PDO -> rollBack(); - throw new Exception( "error selection" ); - return false; - } - return $sth; + $sth = $this->PDO->prepare("SELECT * FROM $tb_name WHERE $where"); + $sth->execute( $data ); } + catch (Exception $e) { + throw $e; // new Exception( "error selection" ); + return false; + } + return $sth; + } /** * Update function with prepared statement. @@ -208,30 +200,27 @@ class DBLayer { public function update( $tb_name, $data, $where ) { $this->useDb(); $field_option_values = null; - foreach ( $data as $key => $value ) - { + foreach ( $data as $key => $value ) { $field_option_values .= ",$key" . '=:' . $key; - } + } $field_option_values = ltrim( $field_option_values, ',' ); try { $sth = $this -> PDO -> prepare( "UPDATE $tb_name SET $field_option_values WHERE $where " ); - foreach ( $data as $key => $value ) - { + foreach ( $data as $key => $value ) { $sth -> bindValue( ":$key", $value ); - } + } $this -> PDO -> beginTransaction(); $sth -> execute(); $this -> PDO -> commit(); } - catch ( Exception $e ) - { - $this -> PDO -> rollBack(); - throw new Exception( 'error in updating' ); + catch ( Exception $e ) { + $this->PDO->rollBack(); + throw $e; // new Exception( 'error in updating' ); return false; - } - return true; } + return true; + } /** * insert function using prepared statements. @@ -272,14 +261,14 @@ class DBLayer { public function delete( $tb_name, $data, $where ) { $this->useDb(); try { - $sth = $this -> PDO -> prepare( "DELETE FROM $tb_name WHERE $where" ); - $this -> PDO -> beginTransaction(); - $sth -> execute( $data ); - $this -> PDO -> commit(); + $sth = $this->PDO->prepare( "DELETE FROM $tb_name WHERE $where" ); + $this->PDO->beginTransaction(); + $sth->execute( $data ); + $this->PDO->commit(); } catch (Exception $e) { - $this -> PDO -> rollBack(); - throw new Exception( "error in deleting" ); + $this->PDO->rollBack(); + throw $e; // new Exception( "error in deleting" ); } } } From d4423d956f2b1724c8dfbde43c5a84aba97db092 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Wed, 3 Sep 2014 05:47:47 +0200 Subject: [PATCH 2/2] Disable connection cache workaround --- code/web/private_php/ams/autoload/dblayer.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/code/web/private_php/ams/autoload/dblayer.php b/code/web/private_php/ams/autoload/dblayer.php index 91d260fc3..3615b5729 100644 --- a/code/web/private_php/ams/autoload/dblayer.php +++ b/code/web/private_php/ams/autoload/dblayer.php @@ -29,13 +29,13 @@ * */ -$PDOCache = array(); +// $PDOCache = array(); class DBLayer { private $PDO; - private $host; - private $dbname; + // private $host; + // private $dbname; /** * The PDO object, instantiated by the constructor @@ -51,15 +51,15 @@ class DBLayer { function __construct($db, $dbn = null) { global $cfg; - $this->host = $cfg['db'][$db]['host']; - $this->dbname = $cfg['db'][$db]['name']; - global $PDOCache; + // $this->host = $cfg['db'][$db]['host']; + // $this->dbname = $cfg['db'][$db]['name']; + /*global $PDOCache; if (isset($PDOCache[$this->host])) { $this->PDO = $PDOCache[$this->host]['pdo']; - } else { + } else {*/ $dsn = "mysql:"; $dsn .= "host=" . $cfg['db'][$db]['host'] . ";"; - // $dsn .= "dbname=" . $cfg['db'][$db]['name'] . ";"; + $dsn .= "dbname=" . $cfg['db'][$db]['name'] . ";"; // Comment this out when using the cache $dsn .= "port=" . $cfg['db'][$db]['port'] . ";"; $opt = array( @@ -68,11 +68,11 @@ class DBLayer { PDO::ATTR_PERSISTENT => true ); $this->PDO = new PDO($dsn, $cfg['db'][$db]['user'], $cfg['db'][$db]['pass'], $opt); - $PDOCache[$this->host] = array(); + /* $PDOCache[$this->host] = array(); $PDOCache[$this->host]['pdo'] = $this->PDO; $PDOCache[$this->host]['use'] = $this->dbname; - $this->PDO->query('USE ' . $this->dbname . ';'); // FIXME safety - } + */ //$this->PDO->query('USE ' . $this->dbname . ';'); // FIXME safety + /*}*/ } function __destruct() { @@ -80,11 +80,11 @@ class DBLayer { } function useDb() { - global $PDOCache; + /*global $PDOCache; if ($PDOCache[$this->host]['use'] != $this->dbname) { $PDOCache[$this->host]['use'] = $this->dbname; $this->PDO->query('USE ' . $this->dbname . ';'); // FIXME safety - } + }*/ } /**