2016-10-01 3 views
1

Я начинаю работать с PHP 7 с mssql прямо сейчас, и мне нужно было переключить функции sql из mssql_ в sqlsrv_. Когда я использовал функции mssql, я менял базу данных с помощью функции mssql_change_db, но, как я увидел сейчас, вместо этой функции нет альтернативных функций. Я думал, что эта функция купит себя, используя USE [DB] в каждом запросе, но она кажется бесполезной или неэффективной. Я думал о другом, что кажется лучше.
Другой способ, который я думаю о том, чтобы добавить перед каждой таблицей имя DB_NAME.dbo.table.
Я также начал строить функцию таким образом, которая находит имя таблицы и автоматически добавляет имя базы данных с «.dbo» перед именем таблицы.
Вот что я делал до сих пор: (я только начал его строить)
Это просто пример проклятия, который еще не закончен.
Каков правильный способ переключения базы данных с помощью sqlsrv?

public function exec($mainQuery, $db = NULL) 
{ 
    if(isset($db)) { 
     $query = $mainQuery; 
     $query = explode('from ', $query); 
     $query = $query[1]; // Getting the rest of the query after the word "Form" 
     if (strpos($query, 'where') !== false) { // Checking if the rest of the query includes the word "Where" 
      $query = explode('where', $query); // Taking the word before the word "Where" 
      $tableName = $query[0]; 
     } 
     else { // The rest of the query is actually the table name, because there is no "Where" in the query 
      $tableName = $query; 
     } 

     $pQuery = str_replace("$tableName", " $db.dbo.$tableName", $mainQuery); // Replacing the table name with the DB.dbo.tablename 

     return sqlsrv_query($this -> sqlHandle, $pQuery); 
    } 
    else { 
     return sqlsrv_query($this -> sqlHandle, $mainQuery); 
    } 
} 


я должен построить его также для JOIN, INSERT INTO(), UPDATE.
Я не знаю почему, но я чувствую, что это плохой способ сделать это,
Вот почему я спрашиваю вас, что лучше всего подходит для переключения баз данных.
Спасибо заранее.

ответ

1

Не рекомендуется использовать USE Database или как изменить базу данных в запросе, используя PHP (вы сделали действительно хороший трюк с именами БД). Для такого рода вещей лучше использовать хранимые процедуры и вызывать их из PHP.

В этом случае вам не нужно думать о том, в какой схеме или базе данных находится ваша таблица, что все написано в SP.

Еще один способ - использовать одну базу данных по умолчанию для всех пользователей и использовать USE database, когда вам нужно получить таблицу из нестандартной базы данных.

+0

Спасибо, что ответили мне, что в моем случае нет «базы данных по умолчанию», я использую 6 баз данных, и я использую их все на каждой кодовой странице, которую я кодирую, я не сделал базы данных сами по себе, это то, что вставляет в нее данные. Благодарю вас, я думаю, что пойду дальше. – guyshitz

Смежные вопросы