Я искал по SO и нашел несколько похожих тем с моей проблемой.Благодаря этим темам я смог написать функцию, которая переименовывает префикс моих таблиц и их столбцов.
В настоящее время мой скрипт работает только для моих таблиц.Все таблицы с определенным префиксом будут переименованы, поэтому таблица с именем «PREFIX_users» будет только «пользователями», как только я запусту свою функцию.Моя проблема в том, что функция для всех моих столбцов внутри таблиц не работает.Я не получаю никаких php ошибок / предупреждений, просто мои столбцы остаются с тем же именем.
Вот мой код:
/*
* Rename tables and columns inside sysrec
* @param db name
*/
public function renameTablesColumns($database) {
$this->db->prepare("use ".$database."");
$sqlShowSORTables = "SHOW TABLES ";
$statement = $this->db->prepare($sqlShowSORTables);
$statement->execute();
$SORtables = $statement->fetchAll(PDO::FETCH_NUM);
foreach($SORtables as $renameTable){
$new_table_prefix = '';
$old_table_prefix = 'PRAEFIX_';
$old_table = $renameTable[0];
if(!preg_match('/^'.$old_table_prefix.'/', $old_table)) {
$new_table=$old_table;
} else {
$new_table = preg_replace('/^'.$old_table_prefix.'/', $new_table_prefix, $old_table);
$sql[] = "ALTER TABLE ".$database.".".$old_table." RENAME TO ".$database.".".$new_table."; ";
}
$sqlShowSORColumns = "SHOW COLUMNS FROM ".$renameTable[0]." ";
$statement = $this->db->prepare($sqlShowSORColumns);
$statement->execute();
$columns = $statement->fetchAll(PDO::FETCH_NUM);
foreach($columns as $renameColumn) {
$new_column_prefix = '';
$old_column_prefix = 'PRAEFIX_';
$old_column = $renameColumn[0];
if(!preg_match('/^'.$old_column_prefix.'/', $old_column)) {
$new_column=$old_column;
} else {
$new_column = preg_replace('/^'.$old_column_prefix.'/', $new_column_prefix, $old_column);
$sql[] = "ALTER TABLE ".$database.".".$old_table." RENAME COLUMN ".$old_column." TO ".$new_column."; ";
}
}
}
$sqlState = implode(' ', $sql);
$executeStatement = $this->db->exec($sqlState);
return $executeStatement?$executeStatement:false;
}
Любая помощь будет очень признательна.