26

HTML フォームからデータベースに画像を保存しようとしています。このタスクを実行するための PHP コードを作成しました。プログラムはエラー メッセージを生成していませんが、MySQL データベースに画像データを挿入していません。よろしければご確認ください。ここで、コードからの抜粋を共有しています。

        /*-------------------
    IMAGE QUERY 
    ---------------*/


    $file   =$_FILES['image']['tmp_name'];
    if(!isset($file))
    {
      echo 'Please select an Image';
    }
    else 
    {
       $image_check = getimagesize($_FILES['image']['tmp_name']);
       if($image_check==false)
       {
        echo 'Not a Valid Image';
       }
       else
       {
        $image = file_get_contents ($_FILES['image']['tmp_name']);
        $image_name = $_FILES['image']['name'];
        if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
        {
          echo $current_id;
         //echo 'Successfull';
        }
        else
        {
          echo mysql_error();
        }
       }
   }
        /*-----------------
    IMAGE QUERY END
    ---------------------*/

    <form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
            File        : <input type='file' name= 'image' >
    </form>

エラー メッセージ SQL 構文にエラーがあります。1 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

3 に答える 3

45

まず、画像列が BLOB 型かどうかを確認する必要があります。

あなたの SQL テーブルについては何も知りませんが、例として自分で作成してみます。

フィールドid(int)、image(blob)、およびimage_name(varchar(64)) を取得しました。

したがって、コードは次のようになります (ID が常に「1」であると仮定し、この mysql_query を使用しましょう):

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
    echo "Something went wrong! :("; 
}

あなたは多くの点で間違っています。mysql 関数を使用しないでください - それらは非推奨です! PDOまたはMySQLiを使用します。ファイルの場所をディスクに保存することも検討する必要があります。画像の保存に MySQL を使用することは、Bad Idea™ であると考えられています。画像などのビッグ データを含む SQL テーブルの処理は、問題になる可能性があります。

また、あなたの HTML フォームは規格外です。次のようになります。

<form action="insert_product.php" method="POST" enctype="multipart/form-data">
    <label>File: </label><input type="file" name="image" />
    <input type="submit" />
</form>

サイドノート:

ファイルを処理して BLOB として格納する場合、データは を使用してエスケープする必要がありmysql_real_escape_string()ます。そうしないと、構文エラーが発生します。

于 2013-07-18T08:50:53.687 に答える