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 — Sélectionne la base de données MS SQL
Description
mssql_select_db() sélectionne la base de données active.
Tous les appels à mssql_query() seront faits dans cette base.
Liste de paramètres
- database_name
-
Le nom de la base de données.
Pour protéger le nom de la base de données qui contient des espaces, des tirets ("-") ou tous autres caractères spéciaux, le nom de la base de données doit être entouré de crochets ([]), comme montré dans l'exemple ci-dessous. Cette technique peut également être appliquée lors de la sélection d'un nom de base de données qui est aussi un mot réservé (comme primary).
- link_identifier
-
Un identifiant de lien MS SQL, retourné par la fonction mssql_connect() ou mssql_pconnect().
Si aucun identifiant de lien n'est spécifié, le dernier lien ouvert sera utilisé. Si aucun lien n'est ouvert, la fonction tentera d'établir un lien en utilisant la fonction mssql_connect() et l'utilisera.
Valeurs de retour
Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec mssql_select_db()
<?php
// Crée une connexion à MSSQL
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// Selectionne la base 'php'
mssql_select_db('php', $link)
?>
Exemple #2 Echappement du nom de la base de données avec des crochets
<?php
// Création d'un lien vers MSSQL
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// Selectionne la base de données 'my.database-name'
mssql_select_db('[my.database-name]', $link);
?>
Voir aussi
- mssql_connect() - Ouvre une connexion à un serveur MS SQL server
- mssql_pconnect() - Ouvre une connexion persistante à un serveur MS SQL
- mssql_query() - Envoie une requête SQL au serveur 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.
