【问题标题】:Generating MySQL UPDATE statements containing BLOB image data生成包含 BLOB 图像数据的 MySQL UPDATE 语句
【发布时间】:2011-02-07 06:17:21
【问题描述】:

我正在尝试编写一个 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'.

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

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

非常感谢任何帮助!

【问题讨论】:

  • 我应该提一下,我知道这是可能的,因为 mysqldump 可以生成包含 BLOB 数据的 SQL INSERT 语句,但我不确定使用什么函数来正确转义数据。
  • 你有没有看过 mysqldump 如何将它打算插入为 BLOB 的字符串转义?
  • 我查看了 C 代码,但无法弄清楚它在做什么。如果我查看生成的 SQL,则在插入期间没有对字符串调用任何函数。它似乎只是 blob 字段的转储,其中单引号被黑斜线转义。我正在使用 REPLACE() 来查看如何在选择上执行此操作。

标签: sql mysql scripting blob dml


【解决方案1】:

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

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

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

【讨论】:

  • 我应该调用什么函数来获取十六进制格式?在将其插入目标之前,我是否需要对该值调用另一个函数?
  • 看看这个,这里一定有你需要的所有信息。您现在必须尝试直到找到适合您的东西。 msdn.microsoft.com/en-us/library/ms187928.aspx
  • 我找到了与您链接的页面对应的 MySQL:dev.mysql.com/doc/refman/4.1/en/…
  • 这有效:select concat('UPDATE IMAGE SET THUMBNAIL = UNHEX(\'', HEX(THUMBNAIL), '\') WHERE ID = ', ID, ';' ) as UPDATE_STATEMENT来自图像;
【解决方案2】:
 <?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>  

效果不错,看看

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2021-06-02
    • 1970-01-01
    • 2015-07-25
    • 2016-02-24
    • 2014-08-03
    • 2015-11-19
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多