@@ -1139,12 +1139,21 @@ function remove_hooks()
11391139// Compat mode!
11401140function 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