使用pdo

时间:2015-12-03 11:51:15

标签: php pdo blob

我第一次使用BLOB,所以我仍然想弄清楚一些东西。

首先,我需要在我的数据库中添加一个附加列,其中将存储一个zip文件。我在phpMyAdmin中做了这个并设置了一些属性:Name = file, Type = BLOB, Default = NULL,还有我需要预设的其他内容,例如MIME type/Browser transformation/Attributes吗?

现在我想使用pdo将zip文件添加(或更好地更新)到现有列中(只有更新部分的代码,pdo连接等已经存在于我的旧代码中并经过测试和工作):< / p>

$id = "id_i_got_from_somewhere_else"; //12345
$file_name= "path_to_my_zip_file";  //projectpath/packets/somename.zip, tested, the file exists 

function merge_file($id, $file_name)
{
    $merge_query = "UPDATE packets SET file=:file WHERE id=:id";
    try
    {
        $stmt=$pdo->prepare($merge_query);
        $stmt->bindParam(':file', $file_name, PDO::PARAM_LOB);
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        return true;
    }
    catch (PDOException $ex)
    {
        echo $ex->getMessage();
        return false;
    }
}

merge_file($id,$file_name);

我可以看到,[BLOB - 53b]被添加到列中。为了进行测试,我单击BLOB并将其下载为.bin-file,将扩展名更改为.zip但无法打开它。 (有点复杂,有没有更好的方法)?

1 个答案:

答案 0 :(得分:1)

使用PHP的file_get_contents()执行此操作:

function merge_file($id, $file_name)
{
    $merge_query = "UPDATE packets SET file=:file WHERE id=:id";
    try
    {
        $stmt=$pdo->prepare($merge_query);
        $stmt->bindParam(':file', file_get_contents($file_name), PDO::PARAM_LOB);
        $stmt->bindParam(':id', $id);
        $stmt->execute();
        return true;
    }
    catch (PDOException $ex)
    {
        echo $ex->getMessage();
        return false;
    }
}