无法正确查询(MSSQL - PHP - JSON)

Posted

技术标签:

【中文标题】无法正确查询(MSSQL - PHP - JSON)【英文标题】:Cannot query correctly (MSSQL - PHP - JSON) 【发布时间】:2017-03-24 03:46:29 【问题描述】:

我的项目有一点问题。结果发现,当名字或姓氏的值中包含“ñ”时,查询结果不返回任何内容。 这是我的代码

config.php:

<?php
   ini_set('mssql.charset', 'UTF-8');
   header('content-type: text/html; charset=utf-8');
   $serverName = "192.168.1.21"; /* IP add of db Server */
   $connection = array("Database" => "db", "UID" => "?", "PWD" => "***");
   $conn = sqlsrv_connect($serverName, $connection);

if(!$conn)
echo "Connection could not be established.";
die(print_r(sqlsrv_errors(), true));

?>

我的查询:

$idnumber = $_POST["idnum"];
$response = array();
$query2 = "SELECT cLName, cFName, cMName, cQualifier FROM student WHERE cIDNO = '$idnumber'";

try
    $stmt2 = sqlsrv_query($conn, $query2);

catch(PDOExeption $ex)
    $response["Success"] = 0;
    $response["message"] = "Database Error!";
    die(json_encode($response));

$row2 = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC);

    if($row2)
        $response["Success"] = 1;
        $response["message"] = "Data available";
        $last_name = $row2["cLName"];
        $first_name = $row2["cFName"];
        $qualify = $row2["cQualifier"];

        $first_name = html_entity_decode(htmlentities($first_name));
        $last_name = html_entity_decode(htmlentities($last_name));

        $name = $first_name." ".$last_name." ".$qualify;

        $response["Name"] = $name;

        echo json_encode($response);
    

    else
        $response["Success"] = 0;
        $response["message"] = "Database Error!";
        die(json_encode($response));
    

我查看了以下页面: 1, 2, 3, etc.

但我不知道为什么我的程序会发生这种情况。

数据库中的示例: cLName = "Española", cFName = "Edgar", cQualifier = "Jr."输出: "Name":"Edgar Jr."同时: cLName = "Agustin", cFName = "Florence", cQualifier = "Jr."输出:"Name":"Florence Agustin Jr."

想法?请问?

注意:我无权更改或更改数据库中的任何内容。

【问题讨论】:

您是否检查过$first_name 中是否存储了一个值 - 这样您就可以确定您的问题是否是从数据库中获取值(但看起来像那样)。 在搜索词前加 N。从 Tab1 中选择 *,其中 Col1 =N'YourColumn' @Andreas 是的,我试过了。我为不同的 ID 尝试了很多试验,没有“ñ”的名称有一个值,而包含的名称没有值。我试过echo它没有json_encode()它是一样的。 $last_name = utf8_encode($row2["cLName"]); 解决了吗? @cske 我试过了。 cLName 返回值,但有点奇怪。因为Lastname: Española .. Becomes: Espa\u00f1ola 【参考方案1】:

我认为它的编码错误 mssql con 不在 UTF-8 模式下,

如果遵循 ISO-8859-1 并且 utf8_encode 缺少输出是 OP 得到的,我会做什么,但使用 utf8_encode 是正确的

<?php


$row = ['cLName' => "Española", 'cFName' => "Edgar", 'cQualifier' => "Jr."];

$last_name  = utf8_encode($row["cLName"]);
$first_name = $row["cFName"];
$qualify    = $row["cQualifier"];

$first_name = html_entity_decode(htmlentities($first_name));
$last_name = html_entity_decode(htmlentities($last_name));

$name = $first_name." ".$last_name." ".$qualify;

$response["Name"] = $name;
$enc = json_encode($response,JSON_UNESCAPED_UNICODE);

print_r($name);
print_r($response);
print_r($enc);

【讨论】:

以上是关于无法正确查询(MSSQL - PHP - JSON)的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 查询 MDB 文件,并返回 JSON

PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行

MSSQL程序没有通过php查询返回任何内容

出现错误 `''' 附近的语法不正确。 ` 使用 PHP 创建 MSSQL 表时

正确的 php 中的 mssql 连接字符串

如何使用 GROUP_CONCAT 正确地将 MySQL 查询转换为 MSSQL 查询