I have noted that mssql_select_db fails if the database name contains a dash or hyphen. for example a database named foo-bar will fail and the error that is returned indicates that the name was interpreted as only 'foo'
mssql_select_db
(PHP 4, PHP 5, PECL odbtp >= 1.1.1)
mssql_select_db — Seleciona um banco de dados do MS SQL
Descrição
$database_name
[, resource $link_identifier
] )
Retorna TRUE em caso de sucesso ou FALSE em caso de falha.
mssql_select_db() estabelece o banco de dados ativo para a conexão especificada por link_identifier. Se nenhum identificador de conexão for especificado, a ultima conexão aberta é usada. Se nenhuma conexão estiver aberta a função tentará estabelecer uma como se mssql_connect() fosse chamada, e irá usa-la.
Todas as próximas chamadas a mssql_query() serão feitas no banco de dados ativo.
Para poder selecionar um banco de dados contendo um espaço ou hifen ("-") você precisa colocar o nome do banco de dados entre colchetes("[]"), como mostrado no exemplo abaixo:
Exemplo #1 Exemplo mssql_select_db()
<?php
$conn = mssql_connect('MYSQLSERVER', 'sa', 'password');
mssql_select_db('[my data-base]', $conn);
?>
Veja também: mssql_connect(), mssql_pconnect(), e mssql_query()
A way around this if you cannot avoid a long DB name is to create a new db and add views.
eg a database called [abcdefghijklmnopqrstuvwxyzABCDEFG] has a table in it called tblHelloWorld.
To reference this you create a database called [alphabet] and create a view with the following query,
SELECT *
FROM [abcdefghijklmnopqrstuvwxyzABCDEFG].dbo.tblHelloWorld
save this view as tblHelloWorld
not sure if this will work on inserts but it does on select queries.
Database names with '-' must also be enclosed in [].
eg. if $databaseName = "my-database" must be selected as:
mssql_select_db('['.$databaseName.']', $connection);
Use of square brackets to enclose the database name is also necessary if the name contains a dot: '.'
e.g.
mssql_select_db('Company.ERP');
Produces the error:
Warning: mssql_select_db(): Sybase: Server message: Could not locate entry in sysdatabases for database 'Company'. No entry found with that name. Make sure that the name is entered correctly. (severity 16, procedure N/A) in
mssql_select_db('[Company.ERP]');
Will select successfully
mssql_select_db() seems to truncate the databasename at the length of 30 characters. In my example the following error occured:
mssql_select_db("VeryLongDatabaseNameWhichIsReallyLong", $this->dbConn);
Warning: mssql_select_db(): message: Could not locate entry in sysdatabases for database 'VeryLongDatabaseNameWhichIsRea'. No entry found with that na
me. Make sure that the name is entered correctly. (severity 16) in...
A shorter databasename solved this issue.
