Поэтому у меня есть поле BINARY (255) в MySQL, и я хочу сохранить в нем строку Base64 и получить его по мере необходимости с помощью PHP.
Я храню данные, используя "UPDATE table SET bindata = 0x'.bin2hex (base64_decode ($ b64));
Кажется, что он работает нормально, во всяком случае, в базу данных есть значение. Но я не могу понять, как вернуть исходную строку base64. Я попытался использовать base64_encode в результатах SELECT, используя HEX (bindata), а затем запустив hex2bin и base64_encode. Кажется, что не работает.
Если строка base64, однажды преобразованная в двоичную, имеет кучу нулей в конце, это прекрасно.
Я бы сохранил ценность таким образом:
$sql = "UPDATE table SET bindata=?";
$stmt = $pdo->prepare($sql);
Передайте в качестве параметра запроса результат base64_decode($b64)
. Это нормально, чтобы передать двоичную строку таким образом.
$stmt->execute([base64_decode($b64)]);
Когда вы извлекаете двоичную строку из базы данных, запросите ее так:
$sql = "SELECT bindata FROM table ...";
$stmt = $pdo->prepare($sql);
$stmt->execute();
Хорошо получить двоичную строку. После того, как вы получите это в строке результатов, вы можете повторно закодировать его.
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo base64_encode($row['bindata']);
}