使用PHP更新MySQL中的blob

时间:2011-03-03 15:57:27

标签: php mysql sql blob

我无法弄清楚我的SQL有什么问题。以下是生成查询的PHP脚本:

function SaveData($data,$id,$file)
{
    $handle = fopen($file['file']['tmp_name'], 'r');
    $datafile = fread($handle, filesize($file['file']['tmp_name']));
    $datafile = mysql_real_escape_string($datafile);
    fclose($handle);        
    $query= "UPDATE data SET Text='" . $data['Text'] . "', Binary='$datafile', Tag='" . $data['Tag'] . "', name='" . $file['file']['name'] . "',type='" . $file['file']['type'] . "', size='" . $file['file']['size'] . "' WHERE Object_ID=".$id;

    mysql_query($query,$this->connection) or die(mysql_error());
}

如果出现以下错误:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法使用附近   '二进制='%PDF-1.5 \ r%âÏÓ\ r \ n37 0   OBJ \为r

任何人都可以给我一些指示吗?

3 个答案:

答案 0 :(得分:1)

BINARY是mySQL中的reserved word

您需要使用反引号或更改列名。

`Binary` = '$datafile'

答案 1 :(得分:0)

二进制是保留字

尝试将其括在后引号中

`Binary`='$datafile', 

以下是关键字Mysql Keywords

的列表

答案 2 :(得分:0)

除了其他答案指出的语法错误之外,你不能只是将带有二进制数据的变量推送到这样的SQL查询中。您必须先将其转换为十六进制字符串。

function SaveData($data,$id,$file)
{
    $handle = fopen($file['file']['tmp_name'], 'rb'); // note the b here
    $datafile = fread($handle, filesize($file['file']['tmp_name']));
    $contents = bin2hex(($datafile)); // no need to escape this
    fclose($handle);        
    $query= "UPDATE data SET Text='" . $data['Text'] . "', `Binary`=x'$contents'; 
    // rest of the code trimmed
}

另请注意,您的字段必须是BLOB才能接受二进制数据。