Задача
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
Это создает строку в PHP с именем $sql
. Забудьте о MySQL на минуту, потому что вы еще не выполняете запрос Вы просто строите строку.
Волшебство PHP означает, что вы можете написать имя переменной & mdash; скажем, $this->image_id
& mdash; внутри двойные кавычки и переменная по-прежнему магически расширяются.
Эта функция, известная как «интерполяция переменных», не выполняется для вызовов функций. Итак, все, что вы здесь делаете - это записываете строку "file_get_contents($tmp_image)"
в базу данных.
Решение (1)
Итак, чтобы объединить результат вызова file_get_contents($tmp_image)
, вы должны выпрыгнуть из строки и сделать что-то явно:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
(Вы можете увидеть даже из синтаксиса, показывающего, как это работает.)
Решение (2)
Теперь проблема в том, что если двоичные данные содержат '
, ваш запрос недействителен. Поэтому вы должны запустить его через mysql_escape_string
, чтобы очистить его для операции запроса:
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Решение (3)
Теперь у вас есть действительно большая строка, и ваша база данных становится громоздкой.
Предпочитают не хранить изображения в базах данных , где вы можете помочь.