我正在尝试通过我的计算机上的PHP连接到MS SQL。我正在运行IIS,安装了PHP 7.2和MS SQL Express 2017.我的基本网页正在运行,但是当我点击打开PHP页面时,连接不起作用。
session_start();
echo "Hello ";
if (isset($_POST['submit'])) {
$_SESSION["server"] = $_POST['server'];
$_SESSION["database"]= $_POST['database'];
$_SESSION["username"] = $_POST['username'];
$_SESSION["password"] = $_POST['password'];
echo $_SESSION["database"];
//CONNECTION
$serverName = $_SESSION["server"];
$connectionInfo["Database"] = $_SESSION["database"];
$connectionInfo["UID"] = $_SESSION["username"];
$connectionInfo["PWD"] = $_SESSION["password"];
echo "midway";
$conn = sqlsrv_connect($serverName, $connectionInfo);
echo "Bye";
}
当我运行时,我得到“中间的Hello尺寸”,这表示页面正在工作,直到它到达连接线。
我不确定使用什么sqlsrv扩展名。
我环顾四周,可以看到7和7.1的版本,但不是7.2版本。
我已将extension=php_sqlsrv_71_nts_x86.dll
添加到php.ini的底部(该文件存在于C:\Program Files (x86)\PHP\v7.2\ext
中)。
任何指针都会感激不尽。我花了几天时间在这上面,不要以为我到处都是 感谢
答案 0 :(得分:14)
我遇到了同样的问题。后来我发现我使用旧版本的Microsoft SQL文件用于PHP。
对于PHP 7.2,您必须使用7.2版本的MS PHP SQL
该版本无法通过微软网站获得。我在https://github.com/Microsoft/msphpsql/releases
找到了它一旦我使用这些文件,一切正常。我使用了64位文件。
然后你需要在php.ini文件中添加这些行
延长= php_sqlsrv_72_nts.dll
extension = php_pdo_sqlsrv_72_nts.dll
答案 1 :(得分:5)
您需要确定的是
然后,您必须查看需求页面here
检查您正在使用的PHP版本,所以更喜欢您的问题,它意味着PHP 7.2
最适合的 SQL Server扩展版本5.3 。
然后转到download page,选择您喜欢的特定版本的链接。 (此问题为 5.3 )
您下载的文件将是可自解压的 EXE 文件,然后解压缩到所需位置。
您将看到dll
个文件列表,如下所示...
php_pdo_sqlsrv_7_nts_x64.dll
php_pdo_sqlsrv_7_nts_x86.dll
php_pdo_sqlsrv_7_ts_x64.dll
php_pdo_sqlsrv_7_ts_x86.dll
...
php_sqlsrv_72_ts_x86.dll
这些文件名的含义是什么?
就像我之前说的,您需要确定选择正确的扩展文件。 SQL Server扩展名需要2个名称分别为php_pdo_sqlsrv_xxx
和php_sqlsrv_xxx
的文件。
下一个数字表示您的PHP
版本,在本例中为PHP 7.2
,因此您需要选择文件名为_72_
的文件。
下一个数字表示您的运行时线程安全或非线程安全,它们特定于文件名_ts_
(线程安全)或{{1 }}(非线程安全)。
下一个数字表示您的运行时 32位或 64位,这些特定于文件名_nts_
(32位)或_x86
(64位)
因此,通过_x64
检查您的PHP环境,或在控制台上运行命令phpinfo()
,然后注意显示的消息,对于我的计算机,看起来像这样...
php --version
通过这些信息,我发现PHP PHP 7.2.12 (cli) (built: Nov 8 2018 06:12:12) ( ZTS MSVC15 (Visual C++ 2017) x86 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
,7.2
表示线程安全(非线程安全将是{{ 1}}),而ZTS
是 32位。
因此,我必须选择的扩展名为NTS
和x86
最终:将它们复制到您的php_sqlsrv_72_ts_x86.dll
文件夹中,并使用这两个文件名编辑php_pdo_sqlsrv_72_ts_x86.dll
。
/php/ext
然后保存php.ini
文件,然后重新启动服务器。
通过查看// example with my case
extension=php_pdo_sqlsrv_72_ts_x86
extension=php_sqlsrv_72_ts_x86
(在页面中必须具有php.ini
)来测试结果。这意味着您的环境现在可以运行PHP并连接到phpinfo.php
。
答案 2 :(得分:3)
我解决了〜 PHP版本7.2.4
pdo_sqlsrv:5.3.0 + 11108
1。下载正确版本的sqlsrv和sqlsrv pdo
2。将其放入XAMPP \ PHP \ ext文件夹
3。之后,将该行写入php.ini>模块设置
extension = php_pdo_sqlsrv_72_ts.dll
extension = php_sqlsrv_72_ts.dll
4.let对MSSQL进行测试,但仍然存在错误消息msg,建议您下载ODBC Driver for SQL
5。转到https://docs.microsoft.com/zh-tw/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017,然后下载正确的文件
(我的工具是SQLServer®X86的命令行实用程序11)
6。再次启动test.php,一切正常!
答案 3 :(得分:1)
我终于找到了解决方案。您所要做的就是在php.ini
文件中使用这些扩展名。
<强> php_sqlsrv_72_ts_x86.dll 强>
<强> php_pdo_sqlsrv_72_ts_x86.dll 强>
然后重新启动XAMPP。
P.S。 “我使用的是PHP 7.2.5”
答案 4 :(得分:0)
如何在xampp上的PHP 7.2版本中使用SQL Server DLL文件
https://github.com/Microsoft/msphpsql/releases
要从PECL存储库下载PHP 7.1或更高版本的Windows DLL,请转到SQLSRV或PDO_SQLSRV PECL页面。
https://pecl.php.net/package/sqlsrv/5.6.1/windows
https://pecl.php.net/package/pdo_sqlsrv/5.6.1/windows
注意:当您在php.ini文件中添加扩展dll文件名时,请不要忘记删除'php_'前缀。例如。
extension = pdo_sqlsrv 扩展名= sqlsrv 请勿更改您放在/ xampp / php / ext /目录中的实际文件名。
“ 7.2线程安全(TS)x86”为我的“ sqlsrv”和“ pdo_sqlsrv”扩展工作。
重新启动xampp或apache,然后在测试php文件中打印phpinfo()时,您会看到已启用的'pdo_sqlsrv'扩展名