-4

PDOメソッドを使用して画像を挿入するには?

次のエラー メッセージが表示されました。

警告: PDOStatement::execute(): MySQL サーバーが C:\xampp\htdocs\testing\testform.php の 21 行目に移動しました

警告: PDOStatement::execute(): C:\xampp\htdocs\testing\testform.php 行 21 の結果セットのヘッダーの読み取りエラー

しかし、小さいサイズの画像をアップロードすると、データベースに保存できますが、画像名は画像名ではありません。私のイメージ名は「asdas」ですが、データベースに保存すると「?

PNG\r\n\Z\n\0\0\0\rIHDR\0\0|\0\08\0\0\0m?:\0\0\0sRGB\0???\0\0\ 0gAMA\0\0???a\0\0\0 pHYs\0\0?\0\0??o?d\0\0??IDATx^??`T??6????? ????c??{?R??*?? ??-=??? Ih!??F??HO?&B?U??s??????\'????Z?Z??a2?

<form action="testform.php" method="post" enctype="multipart/form-data">
<input name="image" type="file">
<input name="submit" type="submit" value="Upload Picture!">

</form>

<?php

    if(isset($_POST['submit']))
    {
        $pdo = new PDO('mysql:dbname=forms1;host=localhost', 'root', 'root',
            array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

        $imageName = mysql_real_escape_string($_FILES["image"]["name"]);
        $imageData = mysql_real_escape_string(file_get_contents($_FILES["image"]["tmp_name"]));
        $imageType = mysql_real_escape_string($_FILES["image"]["type"]);

        if(substr($imageType,0,5)=="image")
        {
            $stmt = $pdo->prepare('INSERT INTO files (name,image) VALUES (:name,:image)');
            $stmt->execute(array('name' => $imageData, 'image' => $imageType));
            echo "Image Uploaded";
        }
        else
        {
            echo "Only images are allowed";
        }
    }

?>
4

1 に答える 1

2

準備されたステートメントを実行するとき$imageDataの代わりに、名前フィールドをに設定しています。$imageName私はあなたがそれが次のことを意味していると信じています:

$stmt->execute(array('name'=>$imageName,'image'=>$imageData));

余談ですが、画像をデータベースに直接保存することは、一般的に非常に悪い方法と考えられています。

また、mysql_real_escape_string 呼び出しは必要ありません。準備されたステートメントを使用すると、エスケープが処理されます。

于 2013-10-23T02:47:19.487 に答える