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 检索数据的正确方法,如果遇到则不会停止错误的特殊字符。
我正在尝试从我的 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 检索数据的正确方法,如果遇到则不会停止错误的特殊字符。