我正在尝试使用sqlsrv api连接到PHP中的MSSQL。当我运行 phpinfo()时,会显示 sqlsrv 的部分。但在实际编写代码时,我无法连接到MSSQL。我正在使用SQL Server R2。我使用指定的主机名从Management Studio连接到数据库。这是代码:
<?php
$serverName = "TEST-PC\SQLEXPRESS";
$databaseName = "TestDB";
$connectionInfo = array("Database"=>"$databaseName");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ){
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
else{
echo "Connection created";
}
$tsql = "SELECT * FROM Test";
$result = sqlsrv_query($conn, $tsql);
echo "Rows returned: ".sqlsrv_num_rows($result);
sqlsrv_close();
?>
代码在页面上打印NOTHING,甚至没有任何错误消息。这是php.ini文件中的条目:
extension=php_sqlsrv_53_ts_vc9.dll
extension=php_pdo_sqlsrv_53_ts_vc9.dll
请帮忙吗?
答案 0 :(得分:1)
由于您未传递用户或密码,因此驱动程序正在尝试通过Windows身份验证进行连接。通过从IIS运行PHP,它将连接任何用户IIS运行的凭据(例如NT AUTHORITY \ IUSR)。您需要将IIS用户添加到允许登录到SQL Server的列表中,然后将与该登录关联的用户添加到数据库中。
答案 1 :(得分:0)
您的意思是将“$ connectionOptions”放在“$ connectionOptions”中吗?
Turn on error_reporting for php for more verbose output.
[编辑]
一些可能的解决方案:
答案 2 :(得分:0)
这是因为sqlsrv_query()默认使用SQLSRV_CURSOR_FORWARD游标类型。但是,为了从sqlsrv_num_rows()获得结果,您应该选择以下这些游标类型之一:
SQLSRV_CURSOR_STATIC SQLSRV_CURSOR_KEYSET SQLSRV_CURSOR_CLIENT_BUFFERED
有关详情,请查看:Cursor Types (SQLSRV Driver)
总之,请尝试此代码:
$tsql=sqlsrv_query("SELECT * FROM Test");
$row_count = sqlsrv_num_rows($tsql);
echo $row_count;