Maison  >  Questions et réponses  >  le corps du texte

XAMPP/SQLSRV : Impossible de trouver Sqlsrv dans PHPINFO( ); erreur de connexion

J'essaie de me connecter à ma base de données SQL Server hébergée sur une VM Linux. J'utilise xampp sur ma machine Windows de développement et la connexion provient d'un site php que je construis. Je pense que je dois utiliser sqlsrv pour me connecter. J'ai téléchargé la DLL sql-server-ver15&viewFallbackFrom=sql-server-2019 depuis https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=

J'ai déplacé les fichiers dll nécessaires vers mon

xamppphpetc 目录。我还验证了 php.ini 文件中的扩展目录是 extension_dir="C:xamppphpext"

Ce qui suit a été ajouté à la section

du php.ini : Dynamic Extensions

extension=php_sqlsrv_81_ts_x86.dll
extension=php_pdo_sqlsrv_81_ts_x86.dll
extension=php8ts.dll

J'ai trouvé des informations sur la suppression

etc. en ligne. J'ai essayé toutes les configurations ci-dessus, à la fois logiques et illogiques. php_ 前缀、删除 .dll 后缀、使用 ts 或非 ts、将所有文件移动到扩展目录、仅将上面列出的几个文件移动到目录中的信息,不包括 php8ts。 dll

Voici un exemple de code de connexion pour mon site Web :

$conn = new PDO('sqlsrv:Server=my_server_ip\MSSQLSERVER;Database=dbname', 'username', 'password');
if ($conn === false) {
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
} else {
    echo "success";
}

J'ai essayé plusieurs exemples de connexion différents. En faisant ce qui précède, j'obtiens cette erreur :

Erreur fatale : exception PDO non interceptée : pilote introuvable dans C:xampphtdocssiteindex.php:123 Trace de pile : #0 C:xampphtdocssiteindex.php(123) : PDO ->__construct('sqlsrv:Server=my_server_ip' , 'username', 'mot de passe') #1 {main} lance

dans C:xampphtdocssiteindex.php à la ligne 123

À partir de là, j'ai logiquement pensé d'accord, vérifions en faisant écho à phpinfo(); . Rien sur

ou les variantes AOP n'est répertorié nulle part dans la liste. Même si vous appuyez sur ctrl+f sur la page sqlsrv, vous ne pouvez trouver que l'erreur ci-dessus. phpinfo(); 。列表中的任何位置都没有列出 sqlsrv

J'ai vérifié que le pilote ODBC est installé.

Une autre chose que j'ai essayée est d'utiliser

au lieu de PDO. J'ai trouvé des informations contradictoires concernant ma version de PHP (8.1), mais j'ai quand même pensé essayer. Cependant, lorsque je rencontre cette variante, j'obtiens : sqlsrv_connect

Erreur fatale : appel à la fonction non définie sqlsrv_connect()

Pour moi, il était évident que mon .dll n'était pas reconnu ou quelque chose comme ça. Pourtant, je n’arrive absolument pas à comprendre pourquoi. J'ai vérifié que tout fonctionne en tant qu'administrateur, redémarré xampp plusieurs fois, supprimé/retéléchargé les DLL, etc.

Quelqu'un peut-il signaler des problèmes évidents auxquels je n'aurais peut-être pas pensé ?

P粉201448898P粉201448898319 Il y a quelques jours619

répondre à tous(1)je répondrai

  • P粉798010441

    P粉7980104412023-11-10 19:58:28

    Résolu. Il y a deux questions.

    1. Mon installation Xampp est cassée. Il ne reconnaît aucune des nouvelles DLL que j'ai remarquées lors de l'utilisation de echo phpinfo(); sur la page.

    2. Pour une raison quelconque, la configuration du fichier ini essaie d'utiliser des DLL x86 au lieu de x64 même si l'extension est écrite comme x64 dans l'ini.

    Étapes de la solution :

    1. J'ai réinstallé et reconfiguré Xampp avec les paramètres par défaut et maintenant la DLL est reconnue.

    2. J'ai supprimé la dll x86 du répertoire des extensions de Xampp.

    Le php.ini final ressemble à ceci :

    extension=php_sqlsrv_81_ts_x64.dll
    extension=php_pdo_sqlsrv_81_ts_x64.dll
    extension=php8ts.dll
    extension=php_pdo_odbc.dll
    extension=php_pdo.dll

    L'utilisation du .dll final peut être redondante, mais elle fonctionnera toujours comme prévu. Assurez-vous de vérifier la version correcte de sqlsrv ou pdo_sqlsrv car des problèmes de compatibilité avec votre version de php peuvent survenir.

    répondre
    0
  • Annulerrépondre