【问题标题】:Update blob in MySQL using PHP使用 PHP 更新 MySQL 中的 blob
【发布时间】:2011-07-08 04:15:09
【问题描述】:

我无法弄清楚我的 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 对象\r

谁能给我一些指点?

【问题讨论】:

    标签: php mysql sql blob


    【解决方案1】:

    BINARY 是 mySQL 中的 reserved word

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

    `Binary` = '$datafile'
    

    【讨论】:

      【解决方案2】:

      二进制是保留字

      尽量用反引号括起来

      `Binary`='$datafile', 
      

      这里是关键字列表Mysql Keywords

      【讨论】:

        【解决方案3】:

        除了其他答案指出的语法错误之外,您不能只将带有二进制数据的变量推入这样的 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 才能接受二进制数据。

        【讨论】:

          猜你喜欢
          • 2014-08-03
          • 2014-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多