問題
$sql = "INSERT INTO ImageStore(ImageId,Image)
VALUES('$this->image_id','file_get_contents($tmp_image)')";
これにより、PHPで$sql
という名前の文字列が作成されます。 。まだクエリを実行していないので、MySQLについては少し忘れてください。文字列を作成しているだけです。
PHPの魔法は、変数名を記述できることを意味します—たとえば、$this->image_id
—内部 二重引用符と変数はまだ魔法のように拡張されます。
「変数補間」と呼ばれるこの機能は、関数呼び出しでは発生しません。したがって、ここで行うのは、文字列"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)
これで、本当に 大きな文字列であり、データベースが大きくなっています。
保存しないことをお勧めしますデータベース内の画像 、あなたがそれを助けることができるところ。