代码之家  ›  专栏  ›  技术社区  ›  michael

SQL Server中当前选定的数据库

  •  0
  • michael  · 技术社区  · 14 年前

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

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

    其中,$this->\u db_connection是与db服务器的连接,$param_database是下一个查询所需的数据库名称。

    问题是在Windows上,strcmp返回 ,在Linux上返回 无效的 .

    任何人都有这方面的工作 每次都要选择数据库。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Andomar    14 年前

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

        2
  •  0
  •   michael    14 年前

    最后,我将最后一个选定数据库的名称存储在db wrapper对象的成员变量中,并将其与SQL连接进行比较。

        3
  •  -1
  •   VolkerK    14 年前

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

    mssql_select_db()的第二个参数是数据库链接,它是一个资源。即。 $this->_DB_Connection 是资源或 @mssql_select_db($param_Database, $this->_DB_Connection); 总是会失败。
    如果 $this->_db_连接 是一个资源,然后通过 资源 strcmp($this->_DB_Connection, $param_Database) 隐式转换为字符串将类似于 resource #3 . 所以,除非调用数据库 资源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;
          }
        }  
      [...]