简体   繁体   中英

json_encode returning null with Postgres database and php

I am referring to this question here on stackoverflow , and I have the same problem, except that I use postgre database and can't seem to get this working.

This is my php function which is querying the database:

public function getCashData($id, $date)
{
    if ($this->openConnection()){
        $query = "SELECT * FROM cash_register (". $id .", '". $date ."');";

        $result = pg_query($query);
        if (!$result){
                return false;
        }

        return pg_fetch_all($result);
    }
}

I call this function like this:

$cashReport = getCashReport($id, $date);

$cashReport = array_map('utf8_encode' , $casaReport); //**note: please read below
echo json_encode($casaReport);

**This was working perfectly when I was returning only one row of result (and not all like now), but now when I'm returning an array of rows this array_map function (which I found in the above mentioned link) is not working as it expects an array and not an array of arrays.

Can you guys help me solve this problem?

Try this:

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}

array_walk_recursive($cashReport, 'encode_items');

It's also possible to "tell" the postgre server to send the data utf-8 encoded.
see http://docs.php.net/pg_set_client_encoding

I did this in the end as I was forced to "fix" it asap:

$json = json_encode($cashReport);
$jsonEscapedNulls = str_replace('null', '""', $json);
echo $jsonEscapedNulls;

Now, I understand that "fixes" aren't solutions but I had no other choice in a give period of time :(. So if someone gives an answer which will work not as a fix but as a general solution I will be grateful. Until then, this will have to do.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM