如何将图像插入数据库


How to insert image into database

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

我收到以下错误消息:

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

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

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

PNG''r'''Z'''0''0''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??*????-=??? 呵呵??F??嗬?&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";
        }
    }
?>

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

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

顺便说一句,将图像直接保存到数据库中通常被认为是非常糟糕的形式。

此外,不需要mysql_real_escape_string调用。使用准备好的语句可以为您处理转义。