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 — Seleziona un database MS SQL
Descrizione
$Nome_database
[, resource $id_connessione
] )
Restituisce TRUE in caso di successo, FALSE in caso di fallimento.
La funzione mssql_select_db() setta il database attivo sul server attraverso la connessione specificata da id_connessione. Se l'argomento id_connessione non viene fornito, si utilizza l'ultima connessione aperta in ordine di tempo. Se non vi sono connessioni aperte, la funzione tenta di stabilire una connessione, come se fosse utilizzata la funzione mssql_connect(), e utilizza quella.
Ciascuna esecuzione di mssql_query() sarĂ fatta sul database attivo.
Per potere selezionare un database contenente un nome o un trattivo ("-") nel nome occorre racchiudere il nome stesso tra parantesi quadre, come illustrato nell'esempio seguente:
Example #1 Esempio di mssql_select_db()
<?php
$conn = mssql_connect('MYSQLSERVER', 'sa', 'password');
mssql_select_db('[my data-base]', $conn);
?>
Vedere anche: 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.
