如何使用带有 space 和 sql 中的特殊字符的数据库名称
How to use a database name with a space and special caracter in sql
我正在使用 CodeIgniter 构建应用程序。目前正试图找到一种方法从第二个数据库中检索数据,该数据库包含名称包含特殊字符和 spaces.
的表
我正在尝试像这样在我的模型中检索数据:
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][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrect vers le mot clé 'FROM'. SELECT top 5 FROM [SS$DP - Order]
在这里我定义了到这个数据库的替代连接:
$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
在 From 和 $bdd
之间添加 space 之后
Severity: Warning
消息:遇到非数字值
指向这条线:
$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 *
检索所有日期时出现此错误:
Memory limit of 10240 KB exceeded for buffered query SELECT * FROM [SS$DP - Order]
但是当我通过做前 50 名来限制大小时,我得到了这个
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrecte vers le mot clé 'FROM'. SELECT top 50 FROM [SS$DP - Order]
FROM 和 table 名称之间没有 space。
$sql = "SELECT top 5 FROM" + $bdd+" WHERE id = ?";
应该是
$sql = "SELECT top 5 FROM " + $bdd+" WHERE id = ?";
我可以这样解决这个问题:
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();
}
}
我不得不使用连接而不是添加。
我正在使用 CodeIgniter 构建应用程序。目前正试图找到一种方法从第二个数据库中检索数据,该数据库包含名称包含特殊字符和 spaces.
的表我正在尝试像这样在我的模型中检索数据:
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][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrect vers le mot clé 'FROM'. SELECT top 5 FROM [SS$DP - Order]
在这里我定义了到这个数据库的替代连接:
$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
在 From 和 $bdd
之间添加 space 之后Severity: Warning
消息:遇到非数字值
指向这条线:
$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 *
检索所有日期时出现此错误:
Memory limit of 10240 KB exceeded for buffered query SELECT * FROM [SS$DP - Order]
但是当我通过做前 50 名来限制大小时,我得到了这个
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Syntaxe incorrecte vers le mot clé 'FROM'. SELECT top 50 FROM [SS$DP - Order]
FROM 和 table 名称之间没有 space。
$sql = "SELECT top 5 FROM" + $bdd+" WHERE id = ?";
应该是
$sql = "SELECT top 5 FROM " + $bdd+" WHERE id = ?";
我可以这样解决这个问题:
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();
}
}
我不得不使用连接而不是添加。