Правильное использование MySQL LOAD_FILE()Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Правильное использование MySQL LOAD_FILE()

Сообщение Anonymous »

У меня возникли проблемы с использованием MYSQL LOAD_FILE() в сочетании с подготовленными операторами для загрузки BLOB-изображения. В результате мне приходится прибегать к использованию отдельных запросов: один для подготовки оператора для получения подробной информации, а другой, который не готовит оператор для вставки моего BLOB. Вот пример запроса, который я пробовал:

Код: Выделить всё

function add_new_video() {
$image = $_FILES['thumbnail_file']['tmp_name']; // pass this file name to getimagesize() to determine the mime-type
$size_array = getimagesize($image);
$thumbnail_mimetype = $size_array['mime'];
$thumbnail_contents = file_get_contents($image);
$thumbnail_filesize = $size_array[3];
$thumbnail_filename = $_FILES['thumbnail_file']['name'];

$title = $_POST['title'];
$summary = $_POST['summary'];
// Checkbox...
if(!empty($_POST['demo_reel'])) {
$demo_reel = $_POST['demo_reel'];
}
else {
$demo_reel = 0;
}

$query = "INSERT INTO videos (title, summary, thumbnail_filename, thumbnail_filesize, thumbnail_mimetype, thumbnail_contents, demo_reel) VALUES(?, ?, ?, ?, ?, LOAD_FILE($image), ?)";
if($stmt = $this->conn->prepare($query)) {
$stmt->bind_param('sssssi', $title, $summary, $thumbnail_filename, $thumbnail_filesize, $thumbnail_mimetype, $thumbnail_contents, $demo_reel);
$stmt->execute();
if($stmt->affected_rows == 1) {
return true;
}
else {
return false;
}
}
}
К сожалению, этот запрос завершается неудачей, и я не могу получить из него никаких ошибок. И наоборот, вот мой текущий запрос, который работает, но не использует подготовленные операторы и менее безопасен:

Код: Выделить всё

    $video_filename = $_POST['file_name'];
$video_number = $_POST['number'];
$title = $_POST['title'];
$summary = $_POST['summary'];
if(!empty($_POST['demo_reel'])) {
$demo_reel = $_POST['demo_reel'];
}
else {
$demo_reel = 0;
}

$image = $_FILES['thumbnail_file']['tmp_name']; // pass this file name to
getimagesize() to determine the mime-type
$size_array = getimagesize($image);
$thumbnail_mimetype = $size_array['mime'];
$thumbnail_filesize = $size_array[3];
$thumbnail_contents = addslashes(file_get_contents($image));
$thumbnail_filename = $_POST['number'] . '.jpg';

$query = "INSERT INTO videos (`video_filename`, `video_number`,
`thumbnail_contents`, `title`, `summary`, `demo_reel`, `thumbnail_filename`,
`thumbnail_filesize`, `thumbnail_mimetype`) VALUES ('$video_filename',
'$video_number', '$thumbnail_contents', '$title', '$summary', '$demo_reel',
'$thumbnail_filename', '$thumbnail_filesize', '$thumbnail_mimetype')";

if($result = $this->conn->query($query)) {
return true;
}
else {
return false;
}
Поскольку все детали в настоящее время не экранированы, и я бы предпочел не повторять процесс использования nl2br() и обратно, я думаю о двух запросах: один с использованием подготовленных операторов для переменных $_POST, а затем другой с использованием addslashes() и обычных операторов для файла. Я хотел бы иметь возможность выполнить всю вставку в одном подготовленном операторе.

Подробнее здесь: https://stackoverflow.com/questions/126 ... -load-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»