Mysql Insert into Blob问题

时间:2013-05-14 05:30:59

标签: php mysql file-upload

在将blob(音乐文件)写入数据库时​​遇到问题。当我尝试上传说songA(“Nothing else Matter.mp3”)时,它播放其他一些(我试图早些时候上传的那个像songB(“我的甜孩子.mp3”)......而且它并不完全当然,通过播放文件我打印['tmp_name'],进入服务器的歌曲是正确的(我已经检查过了)。

我正在使用它上传

$contenttype = $_FILES['song']['type'];
$songfile = $_FILES['song']['tmp_name'];
$size = $_FILES['song']['size'];
$query = "INSERT INTO file(contenttype,file,size) values('".$contenttype."',LOAD_FILE('$songfile'),".$size.")";

这是我的dbtable文件的结构

CREATE TABLE file(
     id INT PRIMARY KEY AUTO_INCREMENT
    ,contenttype VARCHAR(30)
    ,file LONGBLOB
    ,name VARCHAR(30)
    ,size INT
)engine=innodb;

由于服务器正在获取正确的文件,我认为故障是使用mysql

通过

下载文件
$query = "SELECT * FROM file WHERE id=$fileid";
$res = mysql_query($query,$connection) or die("$fileid Error ".mysql_error());
if(!$res){
    $status = false;
    error_log("fileid: ".$fileid);
    $response = new Tonic\Response(Tonic\Response::OK); //using tonic shouldn't matter
}else{
    $tres = mysql_fetch_assoc($res);
    $response = new Tonic\Response(Tonic\Response::OK);
    $response->contentType=$tres['contenttype'];
    $response->contentLength=$tres['size'];
    $response->contentTransferEncoding='binary';
    error_log('Length: '.strlen($tres['file'])); //strangely this is zero ?? but how is it even playing ??
    $response->body = $tres['file'];
}

*编辑我已经多次下载了数据库,这会导致任何问题吗?

1 个答案:

答案 0 :(得分:-1)

LOAD_FILE

您的问题是将音乐文件写入blob。 $ songfile必须是服务器上文件的路径