[ticket/10205] Fix remaining db drivers.

PHPBB3-10205
This commit is contained in:
Oleg Pudeyev 2012-12-04 04:50:41 -05:00
parent 1a7e2211c3
commit 9f549e8249
5 changed files with 93 additions and 43 deletions

View file

@ -355,34 +355,44 @@ class dbal_mssql extends dbal
*/ */
function _sql_error() function _sql_error()
{ {
$error = array( if (function_exists('mssql_get_last_message'))
'message' => @mssql_get_last_message(),
'code' => ''
);
// Get error code number
$result_id = @mssql_query('SELECT @@ERROR as code', $this->db_connect_id);
if ($result_id)
{ {
$row = @mssql_fetch_assoc($result_id); $error = array(
$error['code'] = $row['code']; 'message' => @mssql_get_last_message(),
@mssql_free_result($result_id); 'code' => ''
} );
// Get full error message if possible // Get error code number
$sql = 'SELECT CAST(description as varchar(255)) as message $result_id = @mssql_query('SELECT @@ERROR as code', $this->db_connect_id);
FROM master.dbo.sysmessages if ($result_id)
WHERE error = ' . $error['code'];
$result_id = @mssql_query($sql);
if ($result_id)
{
$row = @mssql_fetch_assoc($result_id);
if (!empty($row['message']))
{ {
$error['message'] .= '<br />' . $row['message']; $row = @mssql_fetch_assoc($result_id);
$error['code'] = $row['code'];
@mssql_free_result($result_id);
} }
@mssql_free_result($result_id);
// Get full error message if possible
$sql = 'SELECT CAST(description as varchar(255)) as message
FROM master.dbo.sysmessages
WHERE error = ' . $error['code'];
$result_id = @mssql_query($sql);
if ($result_id)
{
$row = @mssql_fetch_assoc($result_id);
if (!empty($row['message']))
{
$error['message'] .= '<br />' . $row['message'];
}
@mssql_free_result($result_id);
}
}
else
{
$error = array(
'message' => $this->connect_error,
'code' => '',
);
} }
return $error; return $error;

View file

@ -360,10 +360,20 @@ class dbal_mssql_odbc extends dbal
*/ */
function _sql_error() function _sql_error()
{ {
return array( if (function_exists('odbc_errormsg'))
'message' => @odbc_errormsg(), {
'code' => @odbc_error() return array(
); 'message' => @odbc_errormsg(),
'code' => @odbc_error()
);
}
else
{
return array(
'message' => $this->connect_error,
'code' => '',
);
}
} }
/** /**

View file

@ -439,10 +439,20 @@ class dbal_mysql extends dbal
{ {
if (!$this->db_connect_id) if (!$this->db_connect_id)
{ {
return array( if (function_exists('mysql_error'))
'message' => @mysql_error(), {
'code' => @mysql_errno() return array(
); 'message' => @mysql_error(),
'code' => @mysql_errno()
);
}
else
{
return array(
'message' => $this->connect_error,
'code' => '',
);
}
} }
return array( return array(

View file

@ -674,17 +674,27 @@ class dbal_oracle extends dbal
*/ */
function _sql_error() function _sql_error()
{ {
$error = @ocierror(); if (function_exists('ocierror'))
$error = (!$error) ? @ocierror($this->query_result) : $error;
$error = (!$error) ? @ocierror($this->db_connect_id) : $error;
if ($error)
{ {
$this->last_error_result = $error; $error = @ocierror();
$error = (!$error) ? @ocierror($this->query_result) : $error;
$error = (!$error) ? @ocierror($this->db_connect_id) : $error;
if ($error)
{
$this->last_error_result = $error;
}
else
{
$error = (isset($this->last_error_result) && $this->last_error_result) ? $this->last_error_result : array();
}
} }
else else
{ {
$error = (isset($this->last_error_result) && $this->last_error_result) ? $this->last_error_result : array(); $error = array(
'message' => $this->connect_error,
'code' => '',
);
} }
return $error; return $error;

View file

@ -300,10 +300,20 @@ class dbal_sqlite extends dbal
*/ */
function _sql_error() function _sql_error()
{ {
return array( if (function_exists('sqlite_error_string'))
'message' => @sqlite_error_string(@sqlite_last_error($this->db_connect_id)), {
'code' => @sqlite_last_error($this->db_connect_id) return array(
); 'message' => @sqlite_error_string(@sqlite_last_error($this->db_connect_id)),
'code' => @sqlite_last_error($this->db_connect_id)
);
}
else
{
return array(
'message' => $this->connect_error,
'code' => '',
);
}
} }
/** /**