mysqli查询结果(多行)到php中的json

3npbholx  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(343)

我无法使用json\u encode()php函数查看作为json对象返回的mysql查询结果的所有行。这是我的密码:

$Sql_Query = "SELECT * FROM Users";
$result = mysqli_query($dbc,$Sql_Query);
$ligne = array();
$bilan = array();

while ($rowr = mysqli_fetch_assoc($result)) {
    $ligne = array (
        "User_ID" => $rowr['User_ID']
    );
    $bilan[$ligne['User']] = $ligne[[
        ['User_ID'][$rowr['User_ID']]
    ]];
    array_push($bilan, $ligne);
}
echo json_encode($bilan, JSON_FORCE_OBJECT);

它还给我:
目前,0“{{{{{0 0{{{0 0{0{0{0},”0 0“{{0{1},”1“1”1”1“1”1,”1 1“1”1”1“1”1”1 1“0”0“{{{用户用户用户id id 1”1“1”1”1“1”1”1“1”1 1“{”用户id 1“19”2”2“2”2”2“{“用户用户id”1“78}”3”3,”3“3”3“3”3”3“3”3”3“3”3“3”3”3“3”3“3”3“3”3”3“3”3”3“4”1“4”4“4”4”4“4”4“4”4“4”4“4”4”4“4”6”6“{{{{{{{{“1”5”5”1“1”用户id“:”95“}”,13“:{”用户id“:”96“}”,14“:{”用户id“:”97“}”,15“:{”用户id“:”98“},16“16”:{“用户联合用户id id”:“99”},17“17”:{“用户联合用户id”:“100”},”18“18”:{“用户联合用户id”:“101”},”19“19”:{“用户联合id”:“16”6 6 6 6 6 6 6 6 6 6 6”6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6,”17 16 16“{“用户联合id”:“用户id”:“100,”18,”18 6 6 6 6 6 6 6 6 6 6 6 6 6,”19“19”:“19”19,”19“19”:{“用户联合id”:“用户id”:“102”10”10“102”,20”,20,”20,“20,”20“20,”20 21 21 21 21 21 21“{“20”:{“用户用户联合id”:“用户id”:“用户id”:“id”:“10”6 6 6 6 6 6 6 6 6 6 6,”20,”20,”20,”20,”20“““““:”111“}”,29“:{”用户id“:”112“}”,30“:{”用户id“:”113“},“31”:{“用户id”:“114”},“32”:{“用户id”:“115”},“33”:{“用户id”:“116”}
现在,我尝试将json输出中每条记录的其他字段关联起来。但是当把这个添加到我的代码中时,就没有更多的输出了。

while ($rowr = mysqli_fetch_assoc($result)) {
    $ligne = array (
        "User_ID" => $rowr['User_ID'],
        "User_Nom" => $rowr['User_Nom']
    );      
    $bilan[$ligne['User']] = $ligne[[
        ['User_ID'][$rowr['User_ID']]
    ][
        ['User_Nom'][$rowr['User_Nom']]
    ]];
    array_push($bilan, $ligne);
}
echo json_encode($bilan, JSON_FORCE_OBJECT);

似乎可以显示数字上的值而不是字母字符。
请帮助我混合在同一输出数字和阿尔法内容。
谢谢,阿诺

67up9zun

67up9zun1#

为清晰起见,转换为php>=5.5。
我在猜测和假设,但我还能做什么呢?我看到的主要问题是,您可能会被数组语法绊倒。似乎您希望按“user\u id”重新索引结果,我假定这是在每个表记录中找到的某个字符串标识符。
模块化,程序化。。。

/*
    Assuming you are attempting to re-index by the 'User_ID' field
    of each record before encoding as JSON.

* /

function getDb($ip, $user, $password, $database) {
    $db = mysqli_connect($ip, $user, $password, $database);

    //error checking etc ...

    return $db;
}

function selectRecords(mysqli $db, $sql) {
    $result = mysqli_query($db, $sql);

    if (!$result) {
        throw new UnexpectedValueException("Database query (read) was unsuccessful!");
    }

    return $result;
}

function getUserRecords(mysqli $db) {
    $query = 'SELECT * FROM Users';
    return selectRecords($db, $query);
}

function reindexByField($newIndex, $userResults) {
    $reindexed = [];

    while ($row = mysqli_fetch_assoc($userResults)) {
        if (!isset($row[$newInded])) {
            throw new OutofBoundsException("The index '" . $newIndex . "' does not exist in the tested record");
        }

        $redindexed[$row[$newIndex]] = $row;
    }

    return $reindexed;
}

function getJsonFromArray(array $records) {
    $json = json_encode($records, JSON_FORCE_OBJECT);

    if (!$json) {
        throw new UnexpectedValueException("Records were not encoded into a JSON formatted string. Got boolean false, instead.");
    }

    return $json;
}

以程序的形式,然后。。。

try {
    $db = getDb($ip, $user, $password, $db); // Just pretend for a moment.
    echo getJsonFromArray(reindexByField('User_ID', getUserRecords($db));
} catch (e) {
    // Your handler code here.
} finally {
    mysqli_close($db);
}

面向对象的方法可以使代码更有条理。

u91tlkcl

u91tlkcl2#

你是对的,因为最初的清洁计划,因为它不起作用,我做了太多的修改,最终增加了复杂性,没有必要。。。
我发现在php doc中可以进一步了解在json转换中添加其他字段时产生的错误。json\u last\u error()是理解问题的关键。所以我补充说:

switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - Aucune erreur';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Profondeur maximale atteinte';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Inadéquation des modes ou underflow';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Erreur lors du contrôle des caractères';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Erreur de syntaxe ; JSON malformé';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Caractères UTF-8 malformés, probablement une erreur d\'encodage';
        break;
        default:
            echo ' - Erreur inconnue';
        break;
    }

这将返回一个utf-8编码问题。所以我修改了我的代码添加了一些

utf8_encode($rowr['Fieldname'])

第一个工作方案与@paulh one的非常接近,只是,在我的特定情况下,我必须添加(utf8\u encode())语句:

$Sql_Query = "SELECT * FROM Users";
    $result = mysqli_query($dbc,$Sql_Query);
    $ligne =array();
    $bilan = array();
    while ($rowr = mysqli_fetch_assoc($result)) {
        $ligne = array ("User_ID" => $rowr['User_ID'],  
                        "User_Nom" => utf8_encode($rowr['User_Nom']),
                        "User_Prenom" =>utf8_encode($rowr['User_Prenom']));
        array_push ($bilan, $ligne);
    }
    echo json_encode($bilan, JSON_FORCE_OBJECT);

它现在显示所有的字段,所有的行。但还是有一些”é" 已转换为“\u00e9”。所以这篇文章把最后一块砖放在了解决方案上。
我修改了:
json\强制\对象

json\u unescaped\u unicode
作为json\u encode()参数。
最后,我想要的代码如下:

$Sql_Query = "SELECT * FROM Users";
$result = mysqli_query($dbc,$Sql_Query);
$bilan = array();
while ($rowr = mysqli_fetch_assoc($result)) {
    $ligne = array ("User_ID" => $rowr['User_ID'],  
                    "User_Nom" => utf8_encode($rowr['User_Nom']),
                    "User_Prenom" =>utf8_encode($rowr['User_Prenom']));
    array_push ($bilan, $ligne);
}
echo json_encode($bilan, JSON_UNESCAPED_UNICODE);
bvuwiixz

bvuwiixz3#

$ligne['user']未初始化,请尝试以下操作:

while ($rowr = mysqli_fetch_assoc($result)) {
    $ligne = array (
        "User_ID" => $rowr['User_ID'],
        "User_Nom" => $rowr['User_Nom']
    );      
    array_push($bilan, $ligne);
}
echo json_encode($bilan, JSON_FORCE_OBJECT);

我用这个代码测试了它

$result[] = ['User_ID' => 1, 'User_Nom' => 'Nom1'];
$result[] = ['User_ID' => 2, 'User_Nom' => 'Nom2'];
$result[] = ['User_ID' => 3, 'User_Nom' => 'Nom3'];
$bilan = [];
while ($rowr = array_pop($result)) {
    $ligne = array (
        "User_ID" => $rowr['User_ID'],
        "User_Nom" => $rowr['User_Nom']
    );
    array_push($bilan, $ligne);
}
echo json_encode($bilan, JSON_FORCE_OBJECT);

它提供了以下结果:
{“0”:{“user\u id”:3,“user\u nom”:“nom3”},“1”:{“user\u id”:2,“user\u nom”:“nom2”},“2”:{“user\u id”:1,“user\u nom”:“nom1”}
注意结果的开头不同,它不包含
“”:空,
再。这是奇怪的结果 $bilan[undefined] = undefined 线

相关问题