生成包含BLOB图像数据的MySQL UPDATE语句

时间:2010-04-13 01:43:40

标签: sql mysql scripting blob dml

我正在尝试编写一个SQL语句,该语句将生成一个SQL脚本,该脚本将使用从数据库中选择的IMAGE更新BLOB字段。

这就是我所拥有的:

select concat( 'UPDATE `IMAGE` SET THUMBNAIL = ', 
               QUOTE( THUMBNAIL ), 
               ' WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT
  from IMAGE;

在上文中,THUMBNAIL是包含原始图像数据的BLOB字段。当我运行生成的脚本时,我收到以下错误:

ERROR at line 2: Unknown command '\\'.

我首先尝试使用QUOTE()函数,如下所示:

select concat( 'UPDATE `IMAGE` SET THUMBNAIL = \'', 
               THUMBNAIL, 
               '\' WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT
  from IMAGE;

运行生成的脚本会产生此错误:

ERROR at line 2: Unknown command '\0'.

在select中应用于此BLOB字段的正确函数是什么,所以UPDATE语句可以工作?

如果需要上下文,我希望仅将某个服务器上生成的缩略图迁移到另一台服务器以获取某些图像ID。我会使用mysqldump,但我不想破坏整个表。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您必须使用十六进制格式blob。它看起来像这样:

select concat( 'UPDATE `IMAGE` SET THUMBNAIL = ', 
               0xC9CBBBCCCEB9C8CABCCCCEB9C9CBBB...., 
               ' WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT
  from IMAGE;

或者您可能会发现使用Openrowset命令

很方便

答案 1 :(得分:0)

 <?php if (isset($_POST['sub'])) { 
     $tfname=$_FILES['f1']['tmp_name'];
     $name=$_POST['hi']; 
     $cont=file_get_contents($tfname);
     $cont=addslashes($cont); 
     mysql_connect("localhost" ,"root" ,"");
     mysql_select_db("k"); 
     $sqlstt="update test_image set
         id='2',name='$name',image='$cont' where id='2' ";
     if(mysql_query($sqlstt)) 
         echo "updated"; 
     else 
         echo "not";         
 } ?>

 <form action="" method="post" enctype="multipart/form-data">
     Name:-<input type="text" name="hi" /> 
     select image:-<input type="file" name="f1" required value="select" /> 
     <input type="submit" name="sub" value="update" /> 
 </form>  

这很好用,看看吧