Текущая выбранная база данных в SQL Server - PullRequest
0 голосов
/ 23 июля 2010

В настоящее время мне поручено перенести код нашего веб-сайта на сервер Linux (из Win2003).Веб-сайты работают на базе данных SQL Server.Оригинальный разработчик создал оболочку, которая будет содержать все взаимодействия с базой данных, включая выбор правильной базы данных (приложение охватывает несколько баз данных). Код проблемы выглядит следующим образом ...

if (strcmp($this->_DB_Connection, $param_Database) <> 0) {
  $this->_DB_Selected = @mssql_select_db($param_Database, $this->_DB_Connection);
}

Где $ this -> _ DB_Connection isсоединение с сервером БД и $ param_Database - это имя базы данных, необходимой для следующего запроса.

Проблема в том, что в Windows strcmp возвращает 1 , в linux возвращает NULL .

У каждого есть способ обойти это, что не предполагает выбор базы данных каждый раз.

Ответы [ 3 ]

1 голос
/ 23 июля 2010

Либо ваше соединение не установлено, и _DB_Connection равно нулю, либо переменная $param_Database равна нулю.

0 голосов
/ 02 августа 2010

В итоге я просто сохранил имя последней выбранной базы данных в переменной-члене объекта-обертки БД и сравниваю это вместо соединения SQL

0 голосов
/ 23 июля 2010

Это реальный, "настоящий" код, который вы скопировали и вставили, или вы его набрали здесь?

Второй параметр в mssql_select_db () - это ссылка на базу данных, это ресурс.Т.е. $this->_DB_Connection является либо ресурсом, либо @mssql_select_db($param_Database, $this->_DB_Connection); всегда завершится неудачей.
Если $this->_DB_Connection является ресурсом, то вы передаете ресурс в strcmp($this->_DB_Connection, $param_Database) и неявное преобразование в строку будеткак resource #3.Таким образом, если ваша база данных не называется resource #3, ваш strcmp () всегда будет терпеть неудачу.

Сделайте свой выбор, какая из двух функций всегда будет с ошибкой, с предоставленным кодом.

Чтобы этот подход работал, сохраните имя выбранной в данный момент базы данных в свойстве объекта.и использовать его для сравнения.

  protected $_Current_Database = null;

  [...]  

    if ( 0!==strcmp($this->_Current_Database, $param_Database) ) {
      $this->_DB_Selected = @mssql_select_db($param_Database, $this->_DB_Connection);
      if ( $this->_DB_Selected ) {
        $this->_Current_Database = $param_Database;
      }
      else { // select_db failed.
        $msg = mssql_get_last_message();
        // do something with $msg here, e.g. echo 'mssql message: ', $msg;
      }
    }  
  [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...