Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Saída PHP vazia do banco de dados MySQL para um longblob


Consegui fazer com que a função original produzisse a linha Base64 lançando assim:
    $stmt = $this->con->prepare("SELECT owner, pet_name, last_seen, contact, description, CAST(photo as CHAR(1000000) CHARACTER SET utf8) as photo, location FROM Pets");


Embora isso permitisse que a string Base64 fosse recebida, ela ainda incluía os caracteres indesejados. Os caracteres indesejados foram causados ​​por JSON_ENCODE. Abaixo está o que eu usei para corrigi-lo.

Basicamente, 1. remova os caracteres adicionados e 2. diga ao JSON_ENCODE para não imprimir os caracteres de escape com JSON_UNESCAPED_SLASHES.

Para a função getReports()
function getReports() {
    $stmt = $this->con->prepare("SELECT owner, pet_name, last_seen, contact, description, CAST(photo as CHAR(1000000) CHARACTER SET utf8) as photo, location FROM Pets");
    $stmt->execute();
    $stmt->bind_result($owner, $pet_name, $last_seen, $contact, $description, $photo, $location);

    $reports = array();

    while($stmt->fetch()) {
        $report  = array();
        $report['owner'] = $owner;
        $report['pet_name'] = $pet_name;
        $report['last_seen'] = $last_seen;
        $report['contact'] = $contact;
        $report['description'] = $description;
        $photo = str_replace("\n","",$photo);
        $photo = str_replace("\\/","/", $photo);
        $photo = stripcslashes($photo);
        $report['photo'] = $photo;
        $report['location'] = $location;

        array_push($reports, $report);
    }

    return $reports;
}

E no script Api, alterei o retorno de
echo json_encode($resultArray);

para
echo json_encode($resultArray, JSON_UNESCAPED_SLASHES);

Agora tudo funciona fantástico. Esta é a melhor prática? Não tenho certeza. Tenho certeza de que armazenar base64 provavelmente não é ...