当前在SQL Server中选择的数据库

时间:2010-07-23 09:22:50

标签: php sql-server linux

我目前的任务是将我们的网站代码移植到Linux服务器上(来自Win2003)。这些网站在SQL Server数据库上运行。原始开发人员创建了一个包装器来包含与数据库的所有交互,包括选择正确的数据库(应用程序跨越多个数据库) 问题代码如下......

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

其中$ this-&gt; _DB_Connection是与DB服务器的连接,$ param_Database是下一个查询所需的数据库名称。

问题是在Windows上,strcmp返回 1 ,在linux上返回 NULL

任何人都可以解决这个问题,不会每次都选择数据库。

3 个答案:

答案 0 :(得分:1)

您的连接失败且_DB_Connection为空,或$param_Database变量为空。

答案 1 :(得分:0)

我最后只是将最后选择的数据库的名称存储在DB包装器对象的成员变量中,并且正在比较它而不是SQL连接

答案 2 :(得分:-1)

这是您复制和粘贴的实际“真实”代码,还是您在此处输入的代码?

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;
      }
    }  
  [...]