Korrekte Verwendung von MySQL LOAD_FILE()Php

PHP-Programmierer chatten hier
Anonymous
 Korrekte Verwendung von MySQL LOAD_FILE()

Post by Anonymous »

Ich habe ein paar Probleme bei der Verwendung von MYSQL LOAD_FILE() in Verbindung mit vorbereiteten Anweisungen, um ein Bild-BLOB hochzuladen. Daher muss ich auf separate Abfragen zurückgreifen, eine zum Vorbereiten einer Anweisung für Details und eine andere, die die Anweisung nicht zum Einfügen meines BLOB vorbereitet. Hier ist ein Beispiel für die Abfrage, die ich versucht habe:

Code: Select all

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;
}
}
}
Leider schlägt diese Abfrage fehl und ich kann anscheinend keine Fehler erkennen. Umgekehrt ist hier meine aktuelle Abfrage, die funktioniert, aber keine vorbereiteten Anweisungen verwendet und weniger sicher ist:

Code: Select all

    $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;
}
Da derzeit alle Details nicht maskiert sind und ich den Prozess der Verwendung von nl2br() und wieder zurück lieber nicht durchlaufen möchte, denke ich an zwei Abfragen: eine mit vorbereiteten Anweisungen für die $_POST-Variablen und eine andere mit addslashes() und regulären Anweisungen für die Datei. Ich möchte die gesamte Einfügung in einer vorbereiteten Anweisung erledigen können.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post