如何在SQL中使用带空格和特殊字符的数据库名称

时间:2019-07-10 09:39:54

标签: php codeigniter sqlsrv

我正在使用CodeIgniter构建应用程序。当前正在尝试寻找一种方法来从第二个数据库中检索数据,该数据库包含名称包含特殊字符和空格的表。

我正在尝试像这样检索模型中的数据:

 public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $bdd ='[SS$DP - Order]';
    if($username) {
        $sql = "SELECT top 5 FROM" + $bdd+"  WHERE id = ?";
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }

    $sql = 'SELECT top 5 FROM [SS$DP - Order]';
    $query = $this->legacy_db->query($sql);
    return $query->result_array();
}

但我遇到此错误:

  

[Microsoft] [用于SQL Server的ODBC驱动程序13] [SQL Server]语法错误,例如'FROM'。从[SS $ DP-订单]中选择前5名

在这里我定义了与此数据库的替代连接:

$db['OtherDB'] = array(
'dsn'   => '',
'hostname' => '192.168.14.100',
 'port' => '1433',
'username' => 'StockAgent',
'password' => 'StockAgent',
'database' => 'SVC',
'dbdriver' => 'sqlsrv',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE

);

谁能告诉我问题出在哪里以及如何解决?

EDIT2

发件人 $ bdd

之间添加空格
  

严重性:警告

消息:遇到非数字值

指向此行:

 $sql = "SELECT * FROM " + $bdd;

编辑2

我发现 $ bdd 是一个字符串,因此最好使用串联的.=$bdd而不是+$bdd

所以我的功能变成这样:

   public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $bdd ='[SS$DP - Order]';

    /*($username) {
        $sql = "SELECT top 5 FROM " +$bdd;/* " WHERE id = ?"
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }*/

    $sql = "SELECT top 2 FROM " ;
    $sql.=" ";
    $sql.=$bdd;
    $query = $this->legacy_db->query($sql);
    return $query->result_array();

}

当我尝试使用select *检索所有日期时,出现此错误:

  

缓冲查询SELECT * FROM [SS $ DP-Order]超出了10240 KB的内存限制

但是当我通过排名前50位来限制大小时,就会得到

  

[Microsoft] [用于SQL Server的ODBC驱动程序13] [SQL Server]语法不正确,可能是'FROM'。从[SS $ DP-订单]中选择前50名

2 个答案:

答案 0 :(得分:0)

在FROM和表名之间没有空格。

$sql = "SELECT top 5 FROM" + $bdd+"  WHERE id = ?";

应该是

$sql = "SELECT top 5 FROM " + $bdd+"  WHERE id = ?";

答案 1 :(得分:0)

我可以这样解决这个问题:

   public function getCommandeData($username= null)
{
    $this->legacy_db = $this->load->database('OtherDB', true);
    $DP ="\$DP";
    $bdd ="[Sovac\$DP - Order]";

    if($username) {
        $sql = "SELECT top 5 FROM ".$bdd ." WHERE id = ?";
        $query = $this->legacy_db->query($sql, array($username));
        return $query->result_array();
    }
 }

我不得不使用串联而不是添加。