private function prefix_query($query) {
if (stristr($query,"INSERT INTO")) {
$tmp = explode(" VALUES",$query);
foreach ($this->db_table_names as $table) {
$tmp[0] = str_replace($table,$this->sql_prefix."_".$table,$tmp[0]);
}
$query = implode(" VALUES",$tmp);
}
else {
foreach ($this->db_table_names as $table) {
$query = str_replace($table,$this->sql_prefix."_".$table,$query);
}
}
return $query;
}в $this->sql_prefix хранится префикс текущей БД, в $this->db_table_names лежит массив с названиями таблиц БД, которые в первый раз достается либо запросом SHOW TABLES FROM 'my_DB', либо вписывается ручками в код, в большинстве случаев этот запрос роли не играет, однако в нагруженных приложениях лишних запросов все-таки стоит избегать.
Функция работает не идеально, потому как приходится следить за названиями таблиц в мускуле, однако отсутствие регэкспов заметно ускоряет работу, а при том, что в большинстве сайтов есть не более 4 таблиц - коллизий практически не возникает.