Как предотвратить «ошибку синтаксиса SQL» при вставке данных двоичного изображения в поле большого двоичного объекта MySQL? - PullRequest
0 голосов
/ 20 сентября 2019

Мне нужно переместить изображение (поле blob) из базы данных MySQL в другую, расположенную на двух разных серверах.

Я попытался получить поле blob из первой базы данных и попытался загрузить вторую, но что-то пошло не так (ошибки не отображаются, кстати).

/* SERVER #1 */
/* connection to server1... */

$sql_u="SELECT PHOTO, PHOTO_NAME FROM database1 WHERE ID='1'";
$query_u = mysqli_query($conn, $sql_u);


$record_u = mysqli_fetch_array($query_u);
$photo = $record_u['PHOTO'];
$photo_name = $record_u['PHOTO_NAME'];



/* SERVER #2 */
/* connection to server2... */

$sql_i = "UPDATE database2 SET PHOTO = '$photo', PHOTO_NAME = '$photo_name' WHERE ID='1'";
$query_i = mysqli_query($conn, $sql_i);

Мне нужно обновить вторую базу данных с полем BLOB первого.Я пытался использовать base64_encode (), но все еще не работает.Я думаю, что мне нужно каким-то образом обрабатывать поле BLOB, но я не знаю, как.

ФОТО: ТИП BLOB PHOTO_NAME: VARCHAR TYPE

1 Ответ

3 голосов
/ 20 сентября 2019

Двоичный файл изображения, безусловно, небезопасен как текст SQL.Попробуйте использовать подготовленный оператор для предотвращения экранирования строки, base64_encode или другого преобразования.Пусть библиотеки низкого уровня справятся с этим за вас.

<?php

/* SERVER #1 */
/* connection to server1 as $conn1...  */

$sql_u="SELECT PHOTO, PHOTO_NAME FROM database1 WHERE ID='1'";
$query_u = mysqli_query($conn1, $sql_u);


$record_u = mysqli_fetch_array($query_u);
$record_i = [
  'photo' = $record_u['PHOTO'],
  'photo_name' = $record_u['PHOTO_NAME'],
];



/* SERVER #2 */
/* connection to server2 as $conn2... */

$id = 1;
$sql_i = 'UPDATE database2 SET PHOTO = ?, PHOTO_NAME = ? WHERE ID=?';
$stmt_i = mysqli_prepare($conn2, $sql_i);
mysqli_stmt_bind_param($stmt_i, 'bsi', $record_i['photo'], $record_i['photo_name'], $id);
mysqli_stmt_execute($stmt_i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...