sql >> データベース >  >> RDS >> Mysql

phpを使用してMySqlデータベースにBlobを挿入します

    問題

    $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)

    これで、本当に 大きな文字列であり、データベースが大きくなっています。

    保存しないことをお勧めしますデータベース内の画像 、あなたがそれを助けることができるところ。



    1. OracleD2kFormsのウィンドウ管理

    2. AmazonAWSを使用したPostgreSQLのコールドスタンバイの作成

    3. MariaDB JSON_OBJECT()の説明

    4. SQL更新は、更新の実行中にサブクエリに影響しますか?