web-dev-qa-db-fra.com

SQLSTATE [01002] Échec de la connexion à Adaptive Server (gravité 9)

J'ai le script suivant pour me connecter à mon serveur Microsoft Azure.

<?php

try {
    $hostname = "secrets.database.windows.net";
    $dbname = "secrets";
    $username = "secrets";
    $pw = "secrets";
    $dbh = new PDO ("dblib:Host=$hostname;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
}

echo "Passed!";

Le script ci-dessus transmet mon ancien serveur, mais me donne le message d'erreur suivant lorsqu'il est exécuté à partir d'un nouveau serveur.

SQLSTATE[01002] Adaptive Server connection failed (severity 9)

La configuration de mon nouveau serveur PHP est la suivante:

Sudo apt-get install -y php5.6-fpm php5.6-ldap php5.6-curl php5.6-cli   php5.6-mcrypt php5.6-intl php5.6-json php5.6-pdo-dblib php5.6-mysqlnd php5.6-memcached php5.6-mbstring php5.6-imap php5.6-xml php5.6-sybase

Mes chèques jusqu'ici:

1) Les deux ont la même adresse IP publique.

2) La configuration PDO/ODBC de PHP est identique.

$ php -i | grep PDO
DO
PDO support => enabled
PDO drivers => dblib, mysql, odbc
PDO Driver for FreeTDS/Sybase DB-lib => enabled
PDO Driver for MySQL => enabled
PDO_ODBC
PDO Driver for ODBC (unixODBC) => enabled

3) Je peux envoyer une requête ping à mon serveur en utilisant telnet à partir des deux serveurs en utilisant:

telnet secrets.database.windows.net 1433

Toute suggestion serait appréciée.

5
hawx

Après quelques recherches supplémentaires, je suis tombé sur cette réponse.

Connectez PHP à MSSQL via PDO ODBC

Il me suffisait de mettre à jour mon fichier /etc/freetds/freetds.conf

Mes changements:

Version du protocole TDS non commentée et mise à jour.

tds version = 8.0

Ajout de mssql ci-dessous exemples.

[mssql]
Host =
Port = 1433
tds version = 8.0
8
hawx

J'ai le même problème ici, mais il est corrigé en ajoutant une version de FreeTDS 8.0 à la connexion directement dans le code PHP:

<?php

try {
    $hostname = "secrets.database.windows.net";
    $dbname = "secrets";
    $username = "secrets";
    $pw = "secrets";
    $dbh = new PDO ("dblib:version=8.0;charset=UTF-8;Host={$hostname};dbname={$dbname}", $username, $pwd);
} catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
}

echo "Passed!";
3
Kannika

Dans mon cas, j'avais une faute de frappe dans $dbname, la corriger a résolu le problème.

1
Robin Nemeth

Dans mon cas, le mot de passe de l'utilisateur avait été réinitialisé à mon insu.

0
grizzb