mirror of
				https://github.com/Mibew/mibew.git
				synced 2025-10-28 09:15:31 +03:00 
			
		
		
		
	Created class for work with database and test class for it
This commit is contained in:
		
							parent
							
								
									466cc31f45
								
							
						
					
					
						commit
						12883cfbe2
					
				
							
								
								
									
										204
									
								
								src/messenger/tests/webim/libs/DatabaseTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								src/messenger/tests/webim/libs/DatabaseTest.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,204 @@ | ||||
| <?php | ||||
| 
 | ||||
| require_once dirname(__FILE__) . '/../../../webim/libs/database.php'; | ||||
| require_once dirname(__FILE__) . '/../../../webim/libs/config.php'; | ||||
| 
 | ||||
| /** | ||||
|  * Test class for Database. | ||||
|  * Generated by PHPUnit on 2012-07-11 at 12:37:41. | ||||
|  */ | ||||
| class DatabaseTest extends PHPUnit_Framework_TestCase { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @var Database | ||||
| 	 */ | ||||
| 	protected $object; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sets up the fixture, for example, opens a network connection. | ||||
| 	 * This method is called before a test is executed. | ||||
| 	 */ | ||||
| 	protected function setUp() { | ||||
| 		$this->object = Database::getInstance(); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Tears down the fixture, for example, closes a network connection. | ||||
| 	 * This method is called after a test is executed. | ||||
| 	 */ | ||||
| 	protected function tearDown() { | ||||
| 		$this->object->__destruct(); | ||||
| 	} | ||||
| 
 | ||||
| 	public static function setUpBeforeClass() { | ||||
| 		global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb; | ||||
| 		$dbh = new PDO( | ||||
| 			"mysql:host={$mysqlhost};dbname={$mysqldb}", | ||||
| 			$mysqllogin, | ||||
| 			$mysqlpass | ||||
| 		); | ||||
| 		$dbh->exec( | ||||
| 			"CREATE TABLE phpunit_test_only " . | ||||
| 			"(id INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id))" | ||||
| 		); | ||||
| 		$dbh = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	public static function tearDownAfterClass() { | ||||
| 		global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb; | ||||
| 		$dbh = new PDO( | ||||
| 			"mysql:host={$mysqlhost};dbname={$mysqldb}", | ||||
| 			$mysqllogin, | ||||
| 			$mysqlpass | ||||
| 		); | ||||
| 		$dbh->exec("DROP TABLE phpunit_test_only"); | ||||
| 		$dbh = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	public function testGetInstance() { | ||||
| 		$anotherDatabaseInstance = Database::getInstance(); | ||||
| 		$this->assertSame($this->object, $anotherDatabaseInstance); | ||||
| 		$anotherDatabaseInstance = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	public function testQuery() { | ||||
| 		global $mysqlprefix; | ||||
| 
 | ||||
| 		// Test simple good query
 | ||||
| 		$this->assertTrue($this->object->query("SELECT 'test_value'")); | ||||
| 
 | ||||
| 		// Test various fetch type
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT 'test_value_one' AS field_name", | ||||
| 			NULL, | ||||
| 			array('return_rows' => Database::RETURN_ONE_ROW) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_one', $result['field_name']); | ||||
| 
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT 'test_value_two' AS field_name", | ||||
| 			NULL, | ||||
| 			array( | ||||
| 				'return_rows' => Database::RETURN_ONE_ROW, | ||||
| 				'fetch_type' => Database::FETCH_ASSOC | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_two', $result['field_name']); | ||||
| 
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT 'test_value_four' AS field_name", | ||||
| 			NULL, | ||||
| 			array( | ||||
| 				'return_rows' => Database::RETURN_ONE_ROW, | ||||
| 				'fetch_type' => Database::FETCH_NUM | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_four', $result[0]); | ||||
| 
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT 'test_value_four' AS field_name", | ||||
| 			NULL, | ||||
| 			array( | ||||
| 				'return_rows' => Database::RETURN_ONE_ROW, | ||||
| 				'fetch_type' => Database::FETCH_BOTH | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_four', $result['field_name']); | ||||
| 		$this->assertEquals('test_value_four', $result[0]); | ||||
| 
 | ||||
| 		// Test all rows return
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT 'test_value_five' AS field_name " . | ||||
| 			"UNION SELECT 'test_value_six' AS field_name", | ||||
| 			NULL, | ||||
| 			array('return_rows' => Database::RETURN_ALL_ROWS) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_five', $result[0]['field_name']); | ||||
| 		$this->assertEquals('test_value_six', $result[1]['field_name']); | ||||
| 
 | ||||
| 		// Test unnamed placeholders
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT ? AS field_name ", | ||||
| 			array('test_value_seven'), | ||||
| 			array('return_rows' => Database::RETURN_ONE_ROW) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_seven', $result['field_name']); | ||||
| 
 | ||||
| 		// Test named placeholders
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT :name AS field_name ", | ||||
| 			array(':name' => 'test_value_eight'), | ||||
| 			array('return_rows' => Database::RETURN_ONE_ROW) | ||||
| 		); | ||||
| 		$this->assertEquals('test_value_eight', $result['field_name']); | ||||
| 
 | ||||
| 		// Test prefixies
 | ||||
| 		$result = $this->object->query( | ||||
| 			"SELECT '{test}' AS field_name ", | ||||
| 			NULL, | ||||
| 			array('return_rows' => Database::RETURN_ONE_ROW) | ||||
| 		); | ||||
| 		$this->assertEquals($mysqlprefix.'test', $result['field_name']); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testErrorInfo() { | ||||
| 		$this->object->throwExeptions(true); | ||||
| 		$this->assertFalse($this->object->errorInfo()); | ||||
| 		try{ | ||||
| 			$this->object->query("SOME_FAKE_QUERY"); | ||||
| 			$this->fail('Exception must be thrown!'); | ||||
| 		} catch(Exception $e) { | ||||
| 			$errorInfo = $this->object->errorInfo(); | ||||
| 			$this->assertEquals('42000', $errorInfo[0]); | ||||
| 			$this->assertEquals(1064, $errorInfo[1]); | ||||
| 		} | ||||
| 		$this->object->query("SELECT 'test_value'"); | ||||
| 		$errorInfo = $this->object->errorInfo(); | ||||
| 		$this->assertEquals('00000', $errorInfo[0]); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testInsertedId() { | ||||
| 		$this->object->query("INSERT INTO phpunit_test_only (id) VALUES (NULL)"); | ||||
| 		$actual_id = $this->object->insertedId(); | ||||
| 		list($expected_id) = $this->object->query( | ||||
| 			"SELECT MAX(id) FROM phpunit_test_only", | ||||
| 			NULL, | ||||
| 			array( | ||||
| 				'return_rows' => Database::RETURN_ONE_ROW, | ||||
| 				'fetch_type' => Database::FETCH_NUM | ||||
| 			) | ||||
| 		); | ||||
| 		$this->assertTrue(is_numeric($actual_id)); | ||||
| 		$this->assertEquals($expected_id, $actual_id); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testAffectedRows() { | ||||
| 		// Test on INSERT
 | ||||
| 		$this->object->query( | ||||
| 			"INSERT INTO phpunit_test_only (id) VALUES " . | ||||
| 			"(100), (101), (102), (103), (104), (105)" | ||||
| 		); | ||||
| 		$this->assertEquals(6, $this->object->affectedRows()); | ||||
| 
 | ||||
| 		// Test on UPDATE
 | ||||
| 		$this->object->query( | ||||
| 			"UPDATE phpunit_test_only SET id = id+100 WHERE id > 103" | ||||
| 		); | ||||
| 		$this->assertEquals(2, $this->object->affectedRows()); | ||||
| 
 | ||||
| 		// Test on SELECT
 | ||||
| 		$this->object->query( | ||||
| 			"SELECT * FROM phpunit_test_only WHERE id >= 100 AND id <= 103" | ||||
| 		); | ||||
| 		$this->assertEquals(4, $this->object->affectedRows()); | ||||
| 
 | ||||
| 		// Test on DELETE
 | ||||
| 		$this->object->query( | ||||
| 			"DELETE FROM phpunit_test_only WHERE id >= 100" | ||||
| 		); | ||||
| 		$this->assertEquals(6, $this->object->affectedRows()); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| ?>
 | ||||
							
								
								
									
										368
									
								
								src/messenger/webim/libs/database.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										368
									
								
								src/messenger/webim/libs/database.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,368 @@ | ||||
| <?php | ||||
| /* | ||||
|  * Copyright 2005-2013 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Encapsulates work with database. Implenets singleton pattern to provide only | ||||
|  * one instance. | ||||
|  */ | ||||
| Class Database{ | ||||
| 
 | ||||
| 	const FETCH_ASSOC = 1; | ||||
| 	const FETCH_NUM = 2; | ||||
| 	const FETCH_BOTH = 4; | ||||
| 	const RETURN_ONE_ROW = 8; | ||||
| 	const RETURN_ALL_ROWS = 16; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * An instance of Database class | ||||
| 	 * @var Database | ||||
| 	 */ | ||||
| 	protected static $instance = NULL; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * PDO object | ||||
| 	 * @var PDO | ||||
| 	 */ | ||||
| 	protected $dbh = NULL; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database host | ||||
| 	 * @var string | ||||
| 	 */ | ||||
| 	protected $dbHost = ''; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database user's login | ||||
| 	 * @var string | ||||
| 	 */ | ||||
| 	protected $dbLogin = ''; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database user's password | ||||
| 	 * @var string | ||||
| 	 */ | ||||
| 	protected $dbPass = ''; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database name | ||||
| 	 * @var string | ||||
| 	 */ | ||||
| 	protected $dbName = ''; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Tables prefix | ||||
| 	 * @var string | ||||
| 	 */ | ||||
| 	protected $tablesPrefix = ''; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database connection encoding. Use only if Database::$forceCharsetInConnection set to true | ||||
| 	 * @var string | ||||
| 	 * | ||||
| 	 * @see Database::$forceCharsetInConnection | ||||
| 	 */ | ||||
| 	protected $dbEncoding = 'utf8'; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Determine if connection must be forced to charset, specified in | ||||
| 	 *   Database::$dbEncoding | ||||
| 	 * @var boolean | ||||
| 	 * | ||||
| 	 * @see Database::$dbEncoding | ||||
| 	 */ | ||||
| 	protected $forceCharsetInConnection = true; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Determine if connection to the database must be persistent | ||||
| 	 * @var type | ||||
| 	 */ | ||||
| 	protected $usePersistentConnection = false; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Array of prepared SQL statements | ||||
| 	 * @var array | ||||
| 	 */ | ||||
| 	protected $preparedStatements = array(); | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Id of the last query | ||||
| 	 * @var type | ||||
| 	 */ | ||||
| 	protected $lastQuery = NULL; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Controls if exception must be processed into class or thrown | ||||
| 	 * @var boolean | ||||
| 	 */ | ||||
| 	protected $throwExceptions = false; | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Get instance of Database class. If no instance exists, creates new instance. | ||||
| 	 * | ||||
| 	 * @return Database | ||||
| 	 */ | ||||
| 	public static function getInstance(){ | ||||
| 		if (is_null(self::$instance)) { | ||||
| 			self::$instance = new Database(); | ||||
| 		} | ||||
| 		return self::$instance; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Forbid clone objects | ||||
| 	 */ | ||||
| 	private final function __clone() {} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database class constructor. Set internal database and connection | ||||
| 	 * properties. Create PDO object and store it in the Database object. | ||||
| 	 * | ||||
| 	 * @global string $mysqlhost Contains mysql host. defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global string $mysqllogin Contains mysql login. Defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global string $mysqlpass Contains mysql password. Defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global string $mysqldb Contains mysql database name. Defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global string $dbencoding Contains connection encoding. Defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global string $mysqlprefix Contains mysql tables prefix. Defined in | ||||
| 	 *   libs/config.php | ||||
| 	 * @global boolean $force_charset_in_connection Control force charset in | ||||
| 	 *   conection or not. Defined in libs/config.php | ||||
| 	 * @global boolean $use_persistent_connection Control use persistent | ||||
| 	 *   connection to the database or not. Defined in libs/config.php | ||||
| 	 */ | ||||
| 	protected function __construct(){ | ||||
| 		global $mysqlhost, $mysqllogin, $mysqlpass, $mysqldb, $dbencoding, | ||||
| 			$mysqlprefix, $force_charset_in_connection, $use_persistent_connection; | ||||
| 		try{ | ||||
| 			if (! extension_loaded('PDO')) { | ||||
| 				throw new Exception('PDO extension is not loaded'); | ||||
| 			} | ||||
| 
 | ||||
| 			if (! extension_loaded('pdo_mysql')) { | ||||
| 				throw new Exception('pdo_mysql extension is not loaded'); | ||||
| 			} | ||||
| 
 | ||||
| 			// Set database and connection properties
 | ||||
| 			$this->dbHost = $mysqlhost; | ||||
| 			$this->dbLogin = $mysqllogin; | ||||
| 			$this->dbPass = $mysqlpass; | ||||
| 			$this->dbName = $mysqldb; | ||||
| 			$this->dbEncoding = $dbencoding; | ||||
| 			$this->tablesPrefix = $mysqlprefix; | ||||
| 			$this->forceCharsetInConnection = $force_charset_in_connection; | ||||
| 			$this->usePersistentConnection = $use_persistent_connection; | ||||
| 
 | ||||
| 			// Create PDO object
 | ||||
| 			$this->dbh = new PDO( | ||||
| 				"mysql:host={$this->dbHost};dbname={$this->dbName}", | ||||
| 				$this->dbLogin, | ||||
| 				$this->dbPass | ||||
| 			); | ||||
| 
 | ||||
| 			if ($this->forceCharsetInConnection) { | ||||
| 				$this->dbh->exec("SET NAMES ".$this->dbh->quote($this->dbEncoding)); | ||||
| 			} | ||||
| 
 | ||||
| 		} catch(Exception $e) { | ||||
| 			$this->handleError($e); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Handles errors | ||||
| 	 * @param Exception $e | ||||
| 	 */ | ||||
| 	protected function handleError(Exception $e){ | ||||
| 		if ($this->throwExceptions) { | ||||
| 			throw $e; | ||||
| 		} | ||||
| 		die($e->getMessage()); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Set if exceptions must be process into the class or thrown. | ||||
| 	 * @param boolean $value | ||||
| 	 */ | ||||
| 	public function throwExeptions($value){ | ||||
| 		$this->throwExceptions = $value; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Database class destructor. | ||||
| 	 */ | ||||
| 	public function __destruct(){ | ||||
| 		foreach($this->preparedStatements as $key => $statement) { | ||||
| 			$this->preparedStatements[$key] = NULL; | ||||
| 		} | ||||
| 		$this->dbh = NULL; | ||||
| 		self::$instance = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Executes SQL query. | ||||
| 	 * In SQL query can be used PDO style placeholders: | ||||
| 	 * unnamed placeholders (question marks '?') and named placeholders (like | ||||
| 	 * ':name'). | ||||
| 	 * If unnamed placeholders are used, $values array must have numeric indexes. | ||||
| 	 * If named placeholders are used, $values param must be an associative array | ||||
| 	 * with keys corresponding to the placeholders names | ||||
| 	 * | ||||
| 	 * Table prefix automatically substitute if table name puts in curly braces | ||||
| 	 * | ||||
| 	 * @param string $query SQL query | ||||
| 	 * @param array $values Values, that must be substitute instead of | ||||
| 	 *   placeholders in SQL query. | ||||
| 	 * @param array $params Array of query parameters. It can contains values with | ||||
| 	 *   following keys: | ||||
| 	 *   - 'return_rows' control if rows must be returned and how many rows must | ||||
| 	 *     be returnd. The value can be Database::RETURN_ONE_ROW for olny one row | ||||
| 	 *     or Database::RETURN_ALL_ROWS for all rows. If this key not specified, | ||||
| 	 *     the function will not return any rows. | ||||
| 	 *   - 'fetch_type' control indexes in resulting rows. The value can be | ||||
| 	 *     Database::FETCH_ASSOC for associative array, Database::FETCH_NUM for | ||||
| 	 *     array with numeric indexes and Database::FETCH_BOTH for both indexes. | ||||
| 	 *     Default value is Database::FETCH_ASSOC. | ||||
| 	 * @return mixed If 'return_rows' key of the $params array is specified, | ||||
| 	 *   returns one or several rows (depending on $params['return_rows'] value) or | ||||
| 	 *   boolean false on fail. | ||||
| 	 *   If 'return_rows' key of the $params array is not specified, returns | ||||
| 	 *   boolean true on success or false on fail. | ||||
| 	 * | ||||
| 	 * @see Database::RETURN_ONE_ROW | ||||
| 	 * @see Database::RETURN_ALL_ROWS | ||||
| 	 * @see Database::FETCH_ASSOC | ||||
| 	 * @see Database::FETCH_NUM | ||||
| 	 * @see Database::FETCH_BOTH | ||||
| 	 */ | ||||
| 	public function query($query, $values = NULL, $params = array()){ | ||||
| 		try{ | ||||
| 			$query = preg_replace("/\{(\S+)\}/", $this->tablesPrefix."$1", $query); | ||||
| 
 | ||||
| 			$query_key = md5($query); | ||||
| 			if (! array_key_exists($query_key, $this->preparedStatements)) { | ||||
| 				$this->preparedStatements[$query_key] = $this->dbh->prepare($query); | ||||
| 			} | ||||
| 
 | ||||
| 			$this->lastQuery = $query_key; | ||||
| 
 | ||||
| 			// Execute query
 | ||||
| 			$this->preparedStatements[$query_key]->execute($values); | ||||
| 
 | ||||
| 			// Check if error occurs
 | ||||
| 			if ($this->preparedStatements[$query_key]->errorCode() !== '00000') { | ||||
| 				$errorInfo = $this->preparedStatements[$query_key]->errorInfo(); | ||||
| 				throw new Exception(' Query failed: ' . $errorInfo[2]); | ||||
| 			} | ||||
| 
 | ||||
| 			// No need to return rows
 | ||||
| 			if (! array_key_exists('return_rows', $params)) { | ||||
| 				return true; | ||||
| 			} | ||||
| 
 | ||||
| 			// Some rows must be returned
 | ||||
| 
 | ||||
| 			// Get indexes type
 | ||||
| 			if (! array_key_exists('fetch_type', $params)) { | ||||
| 				$params['fetch_type'] = Database::FETCH_ASSOC; | ||||
| 			} | ||||
| 			switch($params['fetch_type']){ | ||||
| 				case Database::FETCH_NUM: | ||||
| 					$fetch_type = PDO::FETCH_NUM; | ||||
| 					break; | ||||
| 				case Database::FETCH_ASSOC: | ||||
| 					$fetch_type = PDO::FETCH_ASSOC; | ||||
| 					break; | ||||
| 				case Database::FETCH_BOTH: | ||||
| 					$fetch_type = PDO::FETCH_BOTH; | ||||
| 					break; | ||||
| 				default: | ||||
| 					throw new Exception("Unknown 'fetch_type' value!"); | ||||
| 			} | ||||
| 
 | ||||
| 			// Get results
 | ||||
| 			$rows = array(); | ||||
| 			if ($params['return_rows'] == Database::RETURN_ONE_ROW) { | ||||
| 				$rows = $this->preparedStatements[$query_key]->fetch($fetch_type); | ||||
| 			} elseif ($params['return_rows'] == Database::RETURN_ALL_ROWS) { | ||||
| 				$rows = $this->preparedStatements[$query_key]->fetchAll($fetch_type); | ||||
| 			} else { | ||||
| 				throw new Exception("Unknown 'return_rows' value!"); | ||||
| 			} | ||||
| 			$this->preparedStatements[$query_key]->closeCursor(); | ||||
| 
 | ||||
| 			return $rows; | ||||
| 		} catch(Exception $e) { | ||||
| 			$this->handleError($e); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns value of PDOStatement::$errorInfo property for last query | ||||
| 	 * @return string Error info array | ||||
| 	 * | ||||
| 	 * @see PDOStatement::$erorrInfo | ||||
| 	 */ | ||||
| 	public function errorInfo(){ | ||||
| 		if (is_null($this->lastQuery)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		try{ | ||||
| 			$errorInfo = $this->preparedStatements[$this->lastQuery]->errorInfo(); | ||||
| 		} catch (Exception $e) { | ||||
| 			$this->handleError($e); | ||||
| 		} | ||||
| 		return $errorInfo; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns the ID of the last inserted row | ||||
| 	 * | ||||
| 	 * @return int The ID | ||||
| 	 */ | ||||
| 	public function insertedId(){ | ||||
| 		try{ | ||||
| 			$lastInsertedId = $this->dbh->lastInsertId(); | ||||
| 		} catch(Exception $e) { | ||||
| 			$this->handleError($e); | ||||
| 		} | ||||
| 		return $lastInsertedId; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Get count of affected rows in the last query | ||||
| 	 * | ||||
| 	 * @return int Affected rows count | ||||
| 	 */ | ||||
| 	public function affectedRows(){ | ||||
| 		if (is_null($this->lastQuery)) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		try{ | ||||
| 			$affected_rows =  $this->preparedStatements[$this->lastQuery]->rowCount(); | ||||
| 		} catch(Exception $e) { | ||||
| 			$this->handleError($e); | ||||
| 		} | ||||
| 		return $affected_rows; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| ?>
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user