Estou usando o Linux (ubuntu) e estou tentando conectar-me a um banco de dados SQL do Microsoft Azure.
Informação do servidor:
-
O endereço do servidor é a1a1a1a1a1.database.windows.net (a1a1a1a1a1 é um marcador para o nome do meu servidor)
-
O nome do banco de dados é MyDatabase
-
A tabela é chamada [dbo]. [Preguiça]
Configurações do Freetds.conf:
[global]
dump file = /tmp/freetds.log
debug flags = 0xffff
text size = 64512
[a1a1a1a1a1.database.windows.net]
host = a1a1a1a1a1.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8
Quando eu corro
php -r "phpinfo();" | grep "PDO drivers"
no terminal, ele retorna
PDO drivers => dblib, mysql
então, tanto quanto é do meu conhecimento, todas as configurações e instalações de drivers são como deveriam ser.
Então, agora, para os erros:
ERRO 1
Se eu inicializar o PDO da seguinte forma:
$conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);
ele se conecta, mas se eu remover os espaços em torno do caractere '=' para dbname da seguinte forma:
$conn = new \PDO ( "dblib:dbname=MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);
ele retorna esses erros da PDOException e freetds.log
SQLSTATE[HY000] General SQL Server error: Check messages from the SQL Server (severity 16)
(dbutil.c:86):msgno 40508: "USE statement is not supported to switch between databases. Use a new connection to connect to a different Database."
ERRO 2
Quando eu corro o seguinte código
try {
$conn = new \PDO ( "dblib:dbname = MyDatabase;host=a1a1a1a1a1.database.windows.net;", $Username, $Password);
$conn->setAttribute( \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION );
$statement = $conn->prepare("SELECT * FROM dbo.Sloth");
$result = $statement->execute();
}
catch ( PDOException $e ) {
print( "Error connecting to SQL Server." );
die(print_r($e));
}
quebra na linha $ result = ... com esses erros da PDOException e freetds.log
SQLSTATE[HY000]: General error: 208 General SQL Server error: Check messages from the SQL Server [208] (severity 16) [(null)]
(dbutil.c:86):msgno 208: "Invalid object name 'dbo.Sloth'."
mas quando eu executo a consulta
SELECT * FROM dbo.Sloth
no Portal de Gerenciamento de Banco de Dados do Azure, ele retorna todas as linhas corretas.
Qualquer ajuda com estas questões será muito apreciada!
EDITAR
Por meio de alguns testes, descobri que os dois problemas se originam do fato de que o PDO não está se conectando ao banco de dados, mas sim se conectando ao "mestre". Isso explicaria o erro Nome do Objeto Inválido do ERRO 2.
Alguma idéia de por que o código no ERRO 1 não se conecta ao MyDatabase?