SQL Server查询错误日志

时间:2012-01-06 15:18:28

标签: php error-handling logging sql-server-2008-r2

我正在使用PHP和SQL Server创建一个应用程序,我更喜欢使用日志,并且在出现错误时只向用户提供一些常规信息,例如在可能的已知错误的情况下由我定义的错误编号,以及日期。但这给了我很多调试问题,我发现PHP日志(php-erros.log)非常有用,我得到的所有错误都可以看到它们非常容易和快速而不会搞乱调试代码。但我仍然有SQL Server的问题,我使用的是Microsoft SQL Server(10.50.1600.1),我发现了一些日志文件(C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Log),但这些只有主要错误,我看不到错误从PHP查询,有没有办法激活或轻松检查这些错误?

3 个答案:

答案 0 :(得分:2)

你的“sqlsrv_fetch_array()期望参数1是资源,布尔给定”错误不是SQL Server而是PHP。

我们可以看到您的代码吗?

您正在尝试从失败的请求中获取数据。这是一种正常的工作方式,看看发生了什么:

<?php

$serverName = "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}

$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );


if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      echo $row['LastName'].", ".$row['FirstName']."<br />";
}

sqlsrv_free_stmt( $stmt);

这段代码:

if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

是您需要的:在尝试获取请求结果之前测试请求结果,并转储错误。 如果要将SQL错误发送到PHP日志,可以使用函数error_log

答案 1 :(得分:1)

启用PHP错误报告,将其放在脚本的顶部:

ini_set('display_errors',1); 
error_reporting(E_ALL);

答案 2 :(得分:0)

本主题说明如何配置sqlsrv和pdo_sqlsrv驱动程序以进行日志记录:http://msdn.microsoft.com/en-us/library/cc296188.aspx。您还需要在php.ini文件中设置log_errors和error_log设置。