【发布时间】:2021-10-19 10:57:38
【问题描述】:
我正在尝试从我的 ms sql 数据库中获取数据。我在php中使用sqlsrv进行连接,一切正常,也许我的select似乎有问题,我认为它与char编码有关。
我的查询:
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);
事实上,我的选择查询在从服务器本身执行时运行良好,但在 php 中使用 sqlsrv_query 执行时,它会在遇到第 6 行“PDA BRUZ - N° 80100”时停止。
结果应该显示 100 行“NOM”,但它只显示 5 行,这很奇怪,因为我使用的查询在 SQL Server 管理工具中运行良好。
我还尝试仅选择第 6 行“PDA BRUZ - N° 80100”,但它不适用于 php。所以我猜这是一个编码问题,可能是由于“°”,但我不知道如何解决这个问题,我已经尝试在 sqlsrv_query 语句之前粘贴这行代码:
ini_set('mssql.charset', 'UTF-8');
但它仍然不起作用,我已经习惯了 mysqli,而不是仅仅停止选择查询会显示数据但字符集不正确。我应该如何解决我的愚蠢错误?
提前致谢
【问题讨论】:
-
我的错,我正在编辑我的问题以使其符合标准
-
“它停止”、“不起作用”和“遇到错误”究竟是什么意思?无论编码如何,查询本身都没有产生正确的结果集的原因。直接在 SSMS 查询窗口中运行时,该查询是否“工作”?如果是这样,那么问题出在您的应用程序中 - 您需要发布执行查询和处理结果集的相关代码。
-
请原谅我的错误解释,我刚刚编辑了我的问题
-
我不认为
mssql.charset指令与sqlsrv扩展有任何关系。在 Microsoft 创建自己的之前,曾经有一个名为mssql的旧 SQL Server 扩展,现在似乎从文档中消失了。您能否为sqlsrv_fetch_array()添加您已经为sqlsrv_query()执行的相同错误检查? -
我刚刚添加了相同的错误检查,但对于 fetch_array 并且到目前为止没有任何报告。显示的结果仍然包含前 5 行而不是我要求的 100 行
标签: php sql-server encoding sqlsrv