• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
FIX: "Fatal error" reporting errors in DB_driver.php

#1
[eluser]Unknown[/eluser]
Trying to connect to a SQLite3 database on a new 2.0.3 install. Looks like 2.1.0 still has the same code, so I'm going to post my fix here for the sake of all...

Initial output:
Quote:Fatal error: [] operator not supported for strings in /var/www/system/database/DB_driver.php on line 1183

It seems that an error message is being built as an array before it is passed on, but it actually gets initialized as a string.

The fix is as follows (just a bit above line 1183):
Quote: if ($native == TRUE)
{
- $message = $error;
+ $message[] = $error;
}
else
{
- $message = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error;

+ $message[] = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error;

}

And after that, I get a much more useful error that I can use to troubleshoot my environmental problems:
Quote:A Database Error Occurred

file is encrypted or is not a database

Filename: core/Loader.php

Line Number: 268

#2
[eluser]Unknown[/eluser]
Your fix doesn't take into account the fact that $message could be an array or a string. You're also ensuring that $message is a multidimensional array if $native is set to FALSE. The following will fix this across the board and not introduce errors when this function is used with different parameters.

[code]

if ($native == TRUE)
{
- $message = $error;
+ $message = ( ! is_array($error)) ? array($error) : $error;
}
else
{
[code]


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2020 MyBB Group.