PHP错误通知:尝试获取第303行C:\code中非对象的属性

PHP错误通知:尝试获取第303行C:\code中非对象的属性,php,sql-server,Php,Sql Server,我正在尝试运行PHP代码,下面的代码出现错误- echo '<div class="container mt-4"><div class="row">'."\n"; echo '<div class="col-md-4 mt-2">'."\n"; echo '<h5>Basic figures</h5>'."\n"; echo '<ul class="list

我正在尝试运行PHP代码,下面的代码出现错误-

echo '<div class="container mt-4"><div class="row">'."\n";
            echo '<div class="col-md-4 mt-2">'."\n";
            echo '<h5>Basic figures</h5>'."\n";
            echo '<ul class="list-group">'."\n";

            echo "<li class='list-group-item'><i class='fa fa-database text-PMS'></i>&nbsp;Database:&nbsp;<span class='text-abc'>".$settingsProject['abc']['dbName']."</span></li>\n";

            $obj = json_decode(file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/code/bin/db.php?function=getNumLocators&db='.$settingsProject['abc']['dbName']));
            echo "<li class='list-group-item'><i class='fa fa-hashtag text-PMS'></i>&nbsp;Num.locators:&nbsp;<span class='text-abc'>".$obj[0]->nLocators."</span></li>\n";
直到昨天它还工作得很好,代码没有改变。但卸载了一些旧版本的MSSQL并重新安装了dotNet Framework

这个问题看起来是重复的,但事实并非如此。我尝试了其他问题的解决方案,但没有效果,所以提出了这个问题


有人能帮我解决吗?

我可以在DB名称前面使用NP来修复它,这是一个DB连接问题

我在Google Chrome inspect元素中发现了这个错误-

SQLState = S1000, NativeError = -2146893022
Error = [Microsoft][ODBC Driver 13 for SQL Server]SQL Server Network Interfaces: The target principal name is incorrect.
我更改了代码如下:

公共函数构造($dbName){

刚刚在服务器名称前面添加了NP:
$bd_server='NP:SQLSERVERNAME';
您还可以尝试TCP:
$bd\u server='TCP:SQLSERVERNAME';

我注意到,如果您卸载了MSSQL或DotNetFramework的某些组件,就会发生这种情况


希望这对某人有所帮助。

它的意思正是它所说的,可能这就是问题所在
$obj[0]->nLocators
什么是$obj,换句话说就是做
var\u导出($obj)
在该错误行之前。作为一个快速测试,请删除或注释该错误,并查看错误是否消失。如果是这样,您必须回溯并查看$obj应该是什么以及为什么不是。如果没有定义和设置它的代码段,我只能猜测说更多。就目前而言,您期望的
$obj
做一个数组,它的第一个元素是一个对象,它的公共属性是
nLocators
,这些都是需要在代码中做的很多假设,在做这些假设之前,你应该先验证一下。我没有改变代码,它一直工作到昨天。为什么它突然变得无效呢?事实上,我现在明白了,你得到的从JSON来看,这看起来像一个数据库API,在这个url中,
function=getNumLocators&db=
,因此您可能对您所说的数据库做了一些事情,但是卸载了一些旧版本的MSSQL,如果这些数据是从一个旧版本的MSSQL中提取的,这可能是一个原因。但我无法知道端点是什么在这种情况下,您应该输出返回的JSON,并查看其中包含的内容。作为补充说明,使用
$\u服务器['HTTP\u HOST']存在一些安全风险
。通常我对站点URL所做的是在一个中心位置为它们定义一个常量,然后在我的代码中使用该常量。这为您在应用程序中更改该常量提供了一个位置。
如果(!defined('site\u URL'))定义('site\u URL','http://mysite-com/“);
然后您可以执行
文件获取内容(站点URL.“somepage?等”)
。客户端可以修改发送到服务器的头的值并非不可能。头会进入
$\u服务器阵列中。我不知道这种情况的风险级别
SQLState = S1000, NativeError = -2146893022
Error = [Microsoft][ODBC Driver 13 for SQL Server]SQL Server Network Interfaces: The target principal name is incorrect.
  $bd_server = 'NP:SQLSERVERNAME';


  try {
    $this->dbh = new PDO( "sqlsrv:Server=" . $bd_server . ";Database=" .$dbName, NULL, NULL); 

    $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  } catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
  }   }