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 — Selecciona la base de datos MS SQL
Descripción
$database_name
[, resource $link_identifier
] )mssql_select_db() selecciona la base de datos activa actualmente en el servidor, que está asociada con el identificador link-identifier.
Cada subsiguiente llamada a mssql_query() se realizará en la base de datos activa.
Parámetros
-
database_name -
El nombre de la base de datos.
Para indicar un nombre de base de datos que contenga espacios, guiones ("-"), o cualquier otro caracter excepcional, el nombre de la base de datos debe indicarse entre corchetes, tal y como se muestra en el siguiente ejemplo. Esta técnica debe ser aplicada también cuando se quiera indicar un nombre de base de datos que sea también una palabra reservada (como primary).
-
link_identifier -
Un identificador de conexión MS SQL, devuelto por mssql_connect() o mssql_pconnect().
Si no se especifica ningún identificador, se asumirá la última conexión abierta. Si no hay ninguna conexióna bierta, la función intentará establecer una conexión como si se hubiera llamado a mssql_connect() , y utilizarla.
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo con mssql_select_db()
<?php
// Crear una conexión a MSSQL
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// Seleccionar la base de datos 'php'
mssql_select_db('php', $link);
?>
Ejemplo #2 Indicar el nombre de la base de datos entre corchetes
<?php
// Crear una conexión a MSSQL
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// Seleccionar la base de datos 'my.database-name'
mssql_select_db('[my.database-name]', $link);
?>
Ver también
- mssql_connect() - Establece una conexión a un servidor MS SQL
- mssql_pconnect() - Abre una conexión MS SQL persistente
- mssql_query() - Enviar una consulta MS SQL
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.
