diff options
Diffstat (limited to 'phpBB/phpbb/db/driver/sqlite3.php')
| -rw-r--r-- | phpBB/phpbb/db/driver/sqlite3.php | 36 | 
1 files changed, 31 insertions, 5 deletions
| diff --git a/phpBB/phpbb/db/driver/sqlite3.php b/phpBB/phpbb/db/driver/sqlite3.php index cc3352af34..0508500c52 100644 --- a/phpBB/phpbb/db/driver/sqlite3.php +++ b/phpBB/phpbb/db/driver/sqlite3.php @@ -102,7 +102,7 @@ class sqlite3 extends \phpbb\db\driver\driver  			break;  			case 'rollback': -				return $this->dbo->exec('ROLLBACK'); +				return @$this->dbo->exec('ROLLBACK');  			break;  		} @@ -134,9 +134,26 @@ class sqlite3 extends \phpbb\db\driver\driver  			if ($this->query_result === false)  			{ +				if ($this->transaction === true && strpos($query, 'INSERT') === 0) +				{ +					$query = preg_replace('/^INSERT INTO/', 'INSERT OR ROLLBACK INTO', $query); +				} +  				if (($this->query_result = @$this->dbo->query($query)) === false)  				{ -					$this->sql_error($query); +					// Try to recover a lost database connection +					if ($this->dbo && !@$this->dbo->lastErrorMsg()) +					{ +						if ($this->sql_connect($this->server, $this->user, '', $this->dbname)) +						{ +							$this->query_result = @$this->dbo->query($query); +						} +					} + +					if ($this->query_result === false) +					{ +						$this->sql_error($query); +					}  				}  				if (defined('DEBUG')) @@ -148,6 +165,11 @@ class sqlite3 extends \phpbb\db\driver\driver  					$this->sql_time += microtime(true) - $this->curtime;  				} +				if (!$this->query_result) +				{ +					return false; +				} +  				if ($cache && $cache_ttl)  				{  					$this->query_result = $cache->sql_save($this, $query, $this->query_result, $cache_ttl); @@ -208,6 +230,7 @@ class sqlite3 extends \phpbb\db\driver\driver  		if ($query_id === false)  		{ +			/** @var \SQLite3Result $query_id */  			$query_id = $this->query_result;  		} @@ -216,7 +239,7 @@ class sqlite3 extends \phpbb\db\driver\driver  			return $cache->sql_fetchrow($query_id);  		} -		return is_object($query_id) ? $query_id->fetchArray(SQLITE3_ASSOC) : false; +		return is_object($query_id) ? @$query_id->fetchArray(SQLITE3_ASSOC) : false;  	}  	/** @@ -389,9 +412,12 @@ class sqlite3 extends \phpbb\db\driver\driver  				$endtime = $endtime[0] + $endtime[1];  				$result = $this->dbo->query($query); -				while ($void = $result->fetchArray(SQLITE3_ASSOC)) +				if ($result)  				{ -					// Take the time spent on parsing rows into account +						while ($void = $result->fetchArray(SQLITE3_ASSOC)) +						{ +							// Take the time spent on parsing rows into account +						}  				}  				$splittime = explode(' ', microtime()); | 
