Heim  >  Fragen und Antworten  >  Hauptteil

XAMPP/SQLSRV: Sqlsrv in PHPINFO() konnte nicht gefunden werden – Fehler bei der Verbindung

Ich versuche, eine Verbindung zu meiner SQL Server-Datenbank herzustellen, die auf einer Linux-VM gehostet wird. Ich verwende xampp auf meinem Entwicklungs-Windows-Rechner und die Verbindung erfolgt über eine PHP-Site, die ich erstelle. Ich denke, ich muss sqlsrv verwenden, um eine Verbindung herzustellen. Ich habe die DLL sql-server-ver15&viewFallbackFrom=sql-server-2019 von https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view= heruntergeladen

Ich habe die notwendigen DLL-Dateien auf mein

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

Folgendes wurde zum Abschnitt

der php.ini hinzugefügt: Dynamic Extensions

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

Informationen zum Löschen

usw. habe ich online gefunden. Ich habe jede der oben genannten Konfigurationen ausprobiert, sowohl logische als auch unlogische. php_ 前缀、删除 .dll 后缀、使用 ts 或非 ts、将所有文件移动到扩展目录、仅将上面列出的几个文件移动到目录中的信息,不包括 php8ts。 dll

Dies ist der Beispiel-Verbindungscode für meine Website:

$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";
}

Ich habe mehrere verschiedene Verbindungsbeispiele ausprobiert. Wenn ich die oben genannten Schritte ausführe, erhalte ich diese Fehlermeldung:

Schwerwiegender Fehler: Nicht erfasste PDOException: Treiber nicht gefunden in C:xampphtdocssiteindex.php:123 Stack Trace: #0 C:xampphtdocssiteindex.php(123): PDO ->__construct('sqlsrv:Server=my_server_ip' , 'username', 'password') #1 {main} wirft

in C:xampphtdocssiteindex.php in Zeile 123

Von hier aus dachte ich logischerweise, okay, lasst uns das überprüfen, indem wir phpinfo(); wiederholen. Nirgendwo in der Liste ist etwas über

oder PDO-Varianten aufgeführt. Selbst wenn Sie auf der SQLSRV-Seite Strg+F drücken, können Sie nur den oben genannten Fehler finden. phpinfo(); 。列表中的任何位置都没有列出 sqlsrv

Ich habe überprüft, dass der ODBC-Treiber installiert ist.

Anderes, was ich versucht habe, ist die Verwendung von

anstelle von PDO. Ich habe widersprüchliche Informationen zu meiner PHP-Version (8.1) gefunden, dachte aber, ich würde es trotzdem versuchen. Wenn ich jedoch auf diese Variante stoße, erhalte ich: sqlsrv_connect

Schwerwiegender Fehler: Aufruf der undefinierten Funktion sqlsrv_connect()

Für mich war es offensichtlich, dass meine .dll nicht erkannt wurde oder so etwas in der Art. Und doch kann ich beim besten Willen nicht verstehen, warum. Ich habe überprüft, dass alles als Administrator ausgeführt wird, xampp mehrmals neu gestartet, die DLLs gelöscht/neu heruntergeladen usw.

Kann jemand auf offensichtliche Probleme hinweisen, an die ich vielleicht nicht gedacht habe?

P粉201448898P粉201448898318 Tage vor616

Antworte allen(1)Ich werde antworten

  • P粉798010441

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

    已解决。有两个问题。

    1. 我的 Xampp 安装已损坏。它无法识别我在页面上使用 echo phpinfo(); 时注意到的任何新 DLL。

    2. 出于某种原因,ini 文件配置尝试使用 x86 dll 而不是 x64,即使扩展在 ini 中编写为 x64 也是如此。

    解决步骤:

    1. 我再次使用默认设置重新安装并重新配置了 Xampp,现在可以识别 dll。

    2. 我从 Xampp 的扩展目录中删除了 x86 dll。

    最终的 php.ini 是这样的:

    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

    使用最终的 .dll 可能是多余的,但它仍然可以按预期工作。确保验证 sqlsrv 或 pdo_sqlsrv 的正确版本,因为可能会出现与您的 php 版本的兼容性问题。

    Antwort
    0
  • StornierenAntwort