Пустой вывод PHP из базы данных MySQL для longblob - PullRequest
1 голос
/ 11 апреля 2019

У меня есть приложение для Android, которое делает фотографию, преобразует растровое изображение в Base64 и отправляет строку Base64 в базу данных MySQL (через PHP) для хранения в виде longblob. Эта часть прекрасно работает! Фактически, я могу загрузить longblob из phpMyAdmin в виде идеальной строки Base64 и легко конвертировать в фотографию JPEG.

Проблема в том, что мой PHP-код для получения блоба возвращает пустую строку:

{
    "owner":"Unknown",
    "pet_name":"Unknown",
    "last_seen":"2019-04-09 11:17:19",
    "contact":"999-888-7654",
    "description":"rubber ducky, lotsa fun",
    ***"photo":""***,
    "location":"Some location"
}

PHP getter:

function getReports() {
    $stmt = $this->con->prepare("SELECT owner, pet_name, last_seen, contact, description, 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;
        $report['photo'] = $photo;
        $report['location'] = $location;

        array_push($reports, $report);
    }

    return $reports;
}

Интересное примечание: если вместо приведенного выше кода я использую приведенный ниже код, я действительно получаю полную строку Base64, но с добавленными символами escape () и новой строки (\ n) повсюду:

//Select everything from table
$sql= "SELECT * FROM Pets";

//Confirm results
if($result = mysqli_query($con, $sql)) {
    //Results? Create array for results and array for data
    $resultArray = array();
    $tempArray = array();

    //Loop through results
    while($row=$result->fetch_object()) {
        // Add each result in results array
        $tempArray=$row;
        array_push($resultArray,$tempArray);
    }

    //Encode array to JSON and output results
    echo json_encode($resultArray);
}

Я бы хотел найти способ исправить приведенный выше код PHP. Я думаю, что моя строка слишком длинна для значения $photo? Любой совет будет чрезвычайно признателен.

Обновление: с Выбор Blob в MYSQL, получение нуля Мне удалось вывести Base64 вместо пустой строки. Тем не менее, у меня все еще есть проблема с символами escape и новой строки.

Любая помощь здесь?

1 Ответ

0 голосов
/ 17 апреля 2019

Мне удалось получить оригинальную функцию для вывода строки Base64, приведя ее так:

    $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");

Хотя это позволило получить строку Base64, она все же включала нежелательные символы. Нежелательные символы были вызваны JSON_ENCODE. Ниже то, что я использовал, чтобы исправить это.

В основном: 1. удалите добавленные символы и 2. скажите JSON_ENCODE не печатать escape-символы с помощью JSON_UNESCAPED_SLASHES.

Для функции 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;
}

А в скрипте Api изменил возврат с

echo json_encode($resultArray);

до

echo json_encode($resultArray, JSON_UNESCAPED_SLASHES);

Теперь все работает фантастически. Это лучшая практика? Я не уверен. Я уверен, что хранение base64, вероятно, не ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...