18.04.2024 07:55:53 pm
В целях эксперимента написал сценарий, для удаления префикса таблиц Базы Данных (
В качестве названия базы, для примера, я использовал название
Сценарий следует запускать с корня сайта.
После выполнения сценария, сайт упадёт. Необходимо внести следующие правки в файл:
Файл: "include/setting/server.sett.php", меняем:
На:
Файл: "include/library/phpfox/database/dba.class.php", удаляем строку:
Файл: "include/library/phpfox/phpfox/phpfox.class.php", меняем:
На:
Файл: "/include/library/phpfox/setting/setting.class.php", меняем:
На:
Перед началом работы, сделайте бэкап Базы Данных, на случай непредвиденных проблем.
Свой код выложил для ознакомления. Я не берусь отвечать, за возможные проблемы, после использования кода.
Мой код может слегка отличаться от Вашего, а если так, то делайте по аналогии.
phpfox_
):ini_set('display_errors', 'On');
error_reporting(E_ALL);
define('PHPFOX', true);
include('include/setting/server.sett.php');
$db = new mysqli($_CONF['db']['host'], $_CONF['db']['user'], $_CONF['db']['pass'], $_CONF['db']['name']);
if ($db->connect_errno)
{
exit('Error MYSQLI: ' . $db->connect_error);
}
$db->set_charset('utf8');
$q = 'SHOW TABLES FROM `danfa`';
$danfa = $db->query($q);
while ($record = $danfa->fetch_assoc())
{
$tableOriginal = $record['Tables_in_danfa'];
$tableNew = str_replace('phpfox_', '', $record['Tables_in_danfa']);
$q = 'RENAME TABLE `' . $tableOriginal . '` TO `' . $tableNew . '`';
$db->query($q) or exit($db->error);
}
В качестве названия базы, для примера, я использовал название
danfa
. Если будите использовать мой код, придётся изменить на название своей Базы, по всему сценарию.Сценарий следует запускать с корня сайта.
После выполнения сценария, сайт упадёт. Необходимо внести следующие правки в файл:
Файл: "include/setting/server.sett.php", меняем:
$_CONF['db']['prefix'] = 'phpfox_';
На:
$_CONF['db']['prefix'] = '';
Файл: "include/library/phpfox/database/dba.class.php", удаляем строку:
$aRow['Name'] = str_replace(Phpfox::getParam(array('db', 'prefix')), 'phpfox_', $aRow['Name']);
Файл: "include/library/phpfox/phpfox/phpfox.class.php", меняем:
public static function getT($table)
{
return 'phpfox_' . $table;
}
На:
// Создает префикс таблицы Базы Данных
public static function getT($table)
{
return '`' . $table . '`';
} // End: Создает префикс таблицы Базы Данных
Файл: "/include/library/phpfox/setting/setting.class.php", меняем:
'prefix' => 'phpfox_',
На:
'prefix' => '',
Перед началом работы, сделайте бэкап Базы Данных, на случай непредвиденных проблем.
Свой код выложил для ознакомления. Я не берусь отвечать, за возможные проблемы, после использования кода.
Мой код может слегка отличаться от Вашего, а если так, то делайте по аналогии.
- Жалоба
19.04.2024 06:56:40 am
Можно и так. В файле: "include/library/phpfox/database/dba.class.php", строку:
Заменил на:
Строку:
Заменил на:
Строку:
Меняю на:
Строку:
Меняю на:
Строку:
Меняю на:
В файле: "include/library/phpfox/phpfox/phpfox.class.php", код:
Поменял на:
Теперь запрос можно писать без метода
Но, если будут полноценные запросы в методах, например:
То его придётся исправлять. Иначе будет синтаксическая ошибка.
$this->inquiry['table'] = 'FROM ' . $table . ($alias ? ' AS ' . $alias : '');
Заменил на:
$this->inquiry['table'] = 'FROM `' . $table . '`' . ($alias ? ' AS ' . $alias : '');
Строку:
$this->inquiry['join'] .= $type . ' ' . $table . ' AS ' . $alias;
Заменил на:
$this->inquiry['join'] .= $type . ' `' . $table . '` AS ' . $alias;
Строку:
return $this->query("DELETE FROM {$table} WHERE ". $sQuery);
Меняю на:
return $this->query('DELETE FROM `' . $table . '` WHERE ' . $sQuery);
Строку:
return 'INSERT INTO ' . $table . ' '.
Меняю на:
return 'INSERT INTO `' . $table . '` '.
Строку:
return 'UPDATE ' . $table . ' SET ' . $sets . ' WHERE ' . $cond;
Меняю на:
return 'UPDATE `' . $table . '` SET ' . $sets . ' WHERE ' . $cond;
В файле: "include/library/phpfox/phpfox/phpfox.class.php", код:
public static function getT($table)
{
return '`' . $table . '`';
}
Поменял на:
public static function getT($table)
{
return $table;
}
Теперь запрос можно писать без метода
phpfox::getT()
, вот так: $page = self::getLib('database')
->select('p.page_id, p.user_id AS owner_user_id, u.user_id')
->from('pages', 'p')
->join('user', 'u', 'u.profile_page_id = p.page_id')
->where('p.page_id = ' . (int) $_REQUEST['custom_pages_post_as_page']);
Но, если будут полноценные запросы в методах, например:
->innerJoin('(SELECT * FROM ' . $table . ' AS n WHERE n.user_id = ' . phpfox::getUserId() . ' ORDER BY n.time_stamp DESC)', 'ninner', 'ninner.notification_id = n.notification_id')
То его придётся исправлять. Иначе будет синтаксическая ошибка.