Skip to content

Commit 8c4196c

Browse files
authored
Merge pull request #35 from sbulen/rs_mysqli_old_vers
Repair_settings.php - allow 1.x to use mysqli
2 parents c566c22 + e1ada35 commit 8c4196c

File tree

1 file changed

+56
-22
lines changed

1 file changed

+56
-22
lines changed

repair_settings.php

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,12 +1139,21 @@ function remove_hooks()
11391139
// Compat mode!
11401140
function smc_compat_initiate($db_server, $db_name, $db_user, $db_passwd, $db_prefix, $db_options = array())
11411141
{
1142-
global $mysql_set_mod, $sourcedir, $db_connection, $db_prefix, $smcFunc;
1142+
global $sourcedir, $db_connection, $db_prefix, $smcFunc, $mysqli_found;
11431143

1144-
if (!empty($db_options['persist']))
1145-
$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
1144+
// Add mysqli support in case someone is trying to resurrect an old forum on a new server
1145+
$mysqli_found = function_exists('mysqli_connect');
1146+
1147+
if ($mysqli_found)
1148+
if (!empty($db_options['persist']))
1149+
$db_connection = @mysqli_connect('p:' . $db_server, $db_user, $db_passwd);
1150+
else
1151+
$db_connection = @mysqli_connect($db_server, $db_user, $db_passwd);
11461152
else
1147-
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
1153+
if (!empty($db_options['persist']))
1154+
$db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
1155+
else
1156+
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
11481157

11491158
// Something's wrong, show an error if its fatal (which we assume it is)
11501159
if (!$db_connection)
@@ -1162,25 +1171,24 @@ function smc_compat_initiate($db_server, $db_name, $db_user, $db_passwd, $db_pre
11621171
}
11631172
}
11641173

1165-
// Select the database, unless told not to
1166-
if (empty($db_options['dont_select_db']) && !@mysql_select_db($db_name, $connection) && empty($db_options['non_fatal']))
1174+
// If DB not found, then dbname is wrong, return null
1175+
if ($mysqli_found)
11671176
{
1168-
if (file_exists($sourcedir . '/Errors.php'))
1169-
{
1170-
require_once($sourcedir . '/Errors.php');
1171-
display_db_error();
1172-
}
1173-
exit('Sorry, SMF was unable to connect to database.');
1177+
if (mysqli_select_db($db_connection, $db_name) === false)
1178+
return null;
11741179
}
11751180
else
1176-
$db_prefix = is_numeric(substr($db_prefix, 0, 1)) ? $db_name . '.' . $db_prefix : '`' . $db_name . '`.' . $db_prefix;
1181+
{
1182+
if (mysql_select_db($db_name, $db_connection) === false)
1183+
return null;
1184+
}
11771185

11781186
// Some core functions, but only once, yes?
11791187
if (!function_exists('smf_db_replacement__callback'))
11801188
{
11811189
function smf_db_replacement__callback($matches)
11821190
{
1183-
global $db_callback, $user_info, $db_prefix;
1191+
global $db_callback, $user_info, $db_prefix, $mysqli_found;
11841192

11851193
list ($values, $connection) = $db_callback;
11861194

@@ -1211,7 +1219,10 @@ function smf_db_replacement__callback($matches)
12111219

12121220
case 'string':
12131221
case 'text':
1214-
return sprintf('\'%1$s\'', mysql_real_escape_string($replacement, $connection));
1222+
if ($mysqli_found)
1223+
return sprintf('\'%1$s\'', mysqli_real_escape_string($connection, $replacement));
1224+
else
1225+
return sprintf('\'%1$s\'', mysql_real_escape_string($replacement, $connection));
12151226
break;
12161227

12171228
case 'array_int':
@@ -1242,7 +1253,10 @@ function smf_db_replacement__callback($matches)
12421253
smf_db_error_backtrace('Database error, given array of string values is empty. (' . $matches[2] . ')', '', E_USER_ERROR, __FILE__, __LINE__);
12431254

12441255
foreach ($replacement as $key => $value)
1245-
$replacement[$key] = sprintf('\'%1$s\'', mysql_real_escape_string($value, $connection));
1256+
if ($mysqli_found)
1257+
$replacement[$key] = sprintf('\'%1$s\'', mysqli_real_escape_string($connection, $value));
1258+
else
1259+
$replacement[$key] = sprintf('\'%1$s\'', mysql_real_escape_string($value, $connection));
12461260

12471261
return implode(', ', $replacement);
12481262
}
@@ -1284,7 +1298,7 @@ function smf_db_replacement__callback($matches)
12841298
{
12851299
function smf_db_query($execute = true, $db_string, $db_values)
12861300
{
1287-
global $db_callback, $db_connection;
1301+
global $db_callback, $db_connection, $mysqli_found;
12881302

12891303
// Only bother if there's something to replace.
12901304
if (strpos($db_string, '{') !== false)
@@ -1302,7 +1316,10 @@ function smf_db_query($execute = true, $db_string, $db_values)
13021316
// We actually make the query in compat mode.
13031317
if ($execute === false)
13041318
return $db_string;
1305-
return mysql_query($db_string, $db_connection);
1319+
if ($mysqli_found)
1320+
return mysqli_query($db_connection, $db_string);
1321+
else
1322+
return mysql_query($db_string, $db_connection);
13061323
}
13071324
}
13081325

@@ -1413,16 +1430,33 @@ function smf_db_list_tables($db = false, $filter = false)
14131430
}
14141431

14151432
// Now, go functions, spread your love.
1416-
$smcFunc['db_free_result'] = 'mysql_free_result';
1417-
$smcFunc['db_fetch_row'] = 'mysql_fetch_row';
1418-
$smcFunc['db_fetch_assoc'] = 'mysql_fetch_assoc';
1419-
$smcFunc['db_num_rows'] = 'mysql_num_rows';
1433+
if ($mysqli_found)
1434+
{
1435+
$smcFunc['db_free_result'] = 'mysqli_free_result';
1436+
$smcFunc['db_fetch_row'] = 'mysqli_fetch_row';
1437+
$smcFunc['db_fetch_assoc'] = 'mysqli_fetch_assoc';
1438+
$smcFunc['db_num_rows'] = 'mysqli_num_rows';
1439+
}
1440+
else
1441+
{
1442+
$smcFunc['db_free_result'] = 'mysql_free_result';
1443+
$smcFunc['db_fetch_row'] = 'mysql_fetch_row';
1444+
$smcFunc['db_fetch_assoc'] = 'mysql_fetch_assoc';
1445+
$smcFunc['db_num_rows'] = 'mysql_num_rows';
1446+
}
14201447
$smcFunc['db_insert'] = 'smf_db_insert';
14211448
$smcFunc['db_query'] = 'smf_db_query';
14221449
$smcFunc['db_quote'] = 'smf_db_query';
14231450
$smcFunc['db_error_backtrace'] = 'smf_db_error_backtrace';
14241451
$smcFunc['db_list_tables'] = 'smf_db_list_tables';
14251452

1453+
// One last check - prefix
1454+
$tables = smf_db_list_tables();
1455+
if (!(is_array($tables) && in_array($db_prefix . 'settings' , $tables)))
1456+
$db_connection = null;
1457+
1458+
$db_prefix = is_numeric(substr($db_prefix, 0, 1)) ? $db_name . '.' . $db_prefix : '`' . $db_name . '`.' . $db_prefix;
1459+
14261460
return $db_connection;
14271461
}
14281462

0 commit comments

Comments
 (0)