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 — MS SQL データベースを選択する
説明
bool mssql_select_db
( string
$database_name
[, resource $link_identifier
] )mssql_select_db() は、指定したリンク ID が指すサーバーの 現在アクティブなデータベースを設定します。
以降の mssql_query() のコールは アクティブなデータベースに対して行われます。
パラメータ
-
database_name -
The database name.
スペースやハイフン("-")、あるいはその他の例外文字を含むデータベース名を エスケープするには、下の例で示すようにデータベース名をブラケットで囲む 必要があります。この手法は、データベースの名前に予約語(たとえば primary)が含まれている場合にも同様に使用する必要があります。
-
link_identifier -
mssql_connect() あるいは mssql_pconnect() が返す MS SQL リンク ID。
リンク ID が指定されない場合、最後にオープンされたリンクが仮定されます。 リンクがオープンされない場合、関数は mssql_connect() がコールされた場合と同様に リンクを確立し、これを使用しようとします。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 mssql_select_db() の例
<?php
// MSSQL へのリンクを作成します
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// データベース 'php' を選択します
mssql_select_db('php', $link);
?>
例2 角括弧によるデータベース名のエスケープ
<?php
// MSSQL へのリンクを作成します
$link = mssql_connect('KALLESPC\SQLEXPRESS', 'sa', 'phpfi');
// データベース 'my.database-name' を選択します
mssql_select_db('[my.database-name]', $link);
?>
参考
- mssql_connect() - MS SQL サーバー接続をオープンする
- mssql_pconnect() - 持続的 MS SQL 接続をオープンする
- mssql_query() - MS SQL クエリを送る
jack at downeastinternet dot com
28-Oct-2010 12:37
Ben Ward
06-Sep-2010 04:17
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.
oyoboy
22-Sep-2008 10:00
Database names with '-' must also be enclosed in [].
eg. if $databaseName = "my-database" must be selected as:
mssql_select_db('['.$databaseName.']', $connection);
edoceo
20-Aug-2008 11:59
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
ifintel
10-Feb-2008 07:15
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.
