sqlsrv_query 遇到错误时停止

sqlsrv_query stopping while encountering an error

我正在尝试从我的 MS sql 数据库中获取数据。我在 php 中使用 sqlsrv 建立连接并且一切正常,也许我的 select 似乎有问题,我认为它与字符编码有关。

我的查询:

SELECT TOP 100 NOM FROM SITE WHERE SITE.DATFINVAL IS NULL

我的代码:

$msconn = msdbConnect();
$ms_query = "SELECT TOP 100 NOM FROM SITE WHERE SITE.DATFINVAL IS NULL;
ini_set('mssql.charset', 'UTF-8');
$stmt = sqlsrv_query($msconn, $ms_query);
if ($stmt === false) {
  die(print_r(sqlsrv_errors(), true));
}

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

sqlsrv_free_stmt($stmt);

事实上,我的 select 查询在从服务器本身执行时工作正常,但是在 php 中使用 sqlsrv_query 执行它时,它在遇到第 6 行时停止是“PDA BRUZ - N° 80100”。

结果应该显示 100 行“NOM”,但它只显示 5 行,这很奇怪,因为我使用的查询在 SQL 服务器管理工​​具中工作正常。

我也试过只 select 第 6 行“PDA BRUZ - N° 80100”,它对 php 不起作用。所以我猜这是一个编码问题,可能是由于“°”引起的,但我不知道如何解决这个问题,我已经尝试将这行代码粘贴到 sqlsrv_query 语句之前:

ini_set('mssql.charset', 'UTF-8');

但它仍然不起作用,我已经习惯了我的sqli,它不仅会停止 select 查询,还会显示数据,但字符集不正确。我该如何解决我的愚蠢错误?

提前致谢

对于遇到这种情况的任何人,我通过编辑

中的 SQL 查询找到了解决方案
SELECT TOP 10 NOM FROM SITE WHERE SITE.DATFINVAL IS NULL

SELECT TOP 10 CONVERT(nvarchar, NOM) FROM SITE WHERE SITE.DATFINVAL IS NULL

这肯定是编码问题,所以我尝试将 varchar(30) 转换为 nvarchar(30),这似乎是使用 sqlsrv_fetch_array 检索数据的正确方法,如果遇到则不会停止错误的特殊字符。