如何将图像插入数据库

时间:2013-10-23 02:43:44

标签: php html

如何使用PDO方法插入图像?

我收到了以下错误消息:

  

警告:PDOStatement :: execute():MySQL服务器在第21行的C:\ xampp \ htdocs \ testing \ testform.php消失了

     

警告:PDOStatement :: execute():在第21行的C:\ xampp \ htdocs \ testing \ testform.php中读取结果集的标题时出错

但是当我上传较小尺寸的图像时,它可以存储到数据库中,但图像名称不是图像名称。 我的图片名称是“asdas” 但是当它存储到数据库中时,就会变成这样的“?

  

PNG \ r \ n \Ž\ n \ 0 \ 0 \ 0 \ rIHDR \ 0 \ 0 | \ 0 \ 08 \ 0 \ 0 \0米?:\ 0 \ 0 \ 0sRGB \ 0 ??? \ 0 \ 0 \ 0gAMA \ 0 \ 0 ??? \ 0 \ 0 \ 0 pHYs \ 0 \ 0?\ 0 \ 0 ?? o?d \ 0 \ 0 ?? IDATx ^ ??`?? ?? ?? ??????? C 17 {?R 11 * ?? ?? - = ???小时?? F 14 HO和放大器;!?2 Bü?的?????? \'???? 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";
        }
    }

?>

1 个答案:

答案 0 :(得分:2)

执行预准备语句时,您将名称字段设置为$imageData而不是$imageName。我相信你的意思是:

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

另外,将图像直接保存到数据库中通常被视为非常糟糕的形式。

此外,不需要mysql_real_escape_string调用。使用准备好的声明会为您解决问题。