Heim > Fragen und Antworten > Hauptteil
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
xamppphpetc
目录。我还验证了 php.ini 文件中的扩展目录是 extension_dir="C:xamppphpext"
verschoben
der php.ini hinzugefügt: Dynamic Extensions
extension=php_sqlsrv_81_ts_x86.dll extension=php_pdo_sqlsrv_81_ts_x86.dll extension=php8ts.dllInformationen 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
$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} wirftVon hier aus dachte ich logischerweise, okay, lasst uns das überprüfen, indem wirin C:xampphtdocssiteindex.php in Zeile 123
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
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粉7980104412023-11-10 19:58:28
已解决。有两个问题。
我的 Xampp 安装已损坏。它无法识别我在页面上使用 echo phpinfo();
时注意到的任何新 DLL。
出于某种原因,ini 文件配置尝试使用 x86 dll 而不是 x64,即使扩展在 ini 中编写为 x64 也是如此。
解决步骤:
我再次使用默认设置重新安装并重新配置了 Xampp,现在可以识别 dll。
我从 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 版本的兼容性问题。