数据表字段类型BLOB读写数据的语句如何写?
请专家们指点。最好有例子,谢谢!

解决方案 »

  1.   

    网上找了半天找了个例子   .. http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_(blob_storage).xml
      

  2.   

    如何用mysql提供的C API实现文件的存取? 
    http://topic.csdn.net/t/20030612/15/1907712.html# MySQL C API 存取 blob这种例子应该很多了。 通过C读你的 图片二进制文件然后update到mysql 
      

  3.   


    void CBlobDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CFileDialogEx dlg(TRUE,_T(""),_T(""),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("照片文件(*.jpg)|*.jpg|"));
    if(IDOK==dlg.DoModal()){
    m_detail_picpath=dlg.GetPathName();
    UpdateData(FALSE);
    }
    }void CBlobDlg::OnButton2() 
    {
    UpdateData(TRUE);
    // TODO: Add your control notification handler code here
    char   *opt_host_name   =   "vmxpcn";   
    char   *opt_user_name   =   "root";   
    char   *opt_password   =   "admin888";   
    unsigned   int   opt_port_num   =   3306;   
    char   *opt_socket_name   =   NULL;   
    char   *opt_db_name   =   "wipdebug";   
    unsigned   int   opt_flags   =   0;   
    MYSQL   *conn;   
        
    FILE   *f;   
        
    conn   =   mysql_init   (NULL);   
        
    mysql_real_connect   (conn,   opt_host_name,   opt_user_name,   opt_password,
    opt_db_name,   opt_port_num,   opt_socket_name,   opt_flags);
        
    if   ((f   =   fopen   (m_detail_picpath,   "rb"))   ==   NULL)
    {
    printf("file   open   eror!");
    return;
    }
    load_image   (conn,   f);
    fclose(f);   
        
    mysql_close   (conn);   }void CBlobDlg::load_image(MYSQL *conn, FILE *f)
    {
    char query[1024*200],   buf[1024*100],   *p;
    unsigned long from_len;
        
    sprintf(query,"insert   into     repair_process   (RPIssuePic)   values   (   \'"   );
    p   =   query   +   strlen   (query);
    while   ((from_len   =   fread   (buf,   1,   sizeof   (buf),   f))   >   0)
    {
    if   (p   +   (2*from_len)   +   3   >   query   +   sizeof   (query))
    {
    printf("image   too   big");
    return;
    }
    p   +=   mysql_real_escape_string   (conn,   p,   buf,   from_len);
    }
    *p++   =   '\'';
    *p++   =   ')';
    strcpy(p,"   where   RPId=1");
        
    // mysql_query(conn,"set character set gbk");
    // TRACE(((char*)mysql_error(conn)));
    mysql_real_query   (conn,   query,   (unsigned   long)   (p-   query)); TRACE(((char*)mysql_error(conn)));
    }
    插入示例图片:Blue hills.jpg没问题
    插入示例图片:Sunset.jpg提示:Data too long for column 'RPIssuePic' at row 1
      

  4.   

    原因找到了,字段类型用"LONGBLOB",没问题了。
      

  5.   

    服务器只有mysql服务,没有http或ftp服务.
      

  6.   

    没有HTTP,则只能用你的方法了,把图片文件写入到数据库。只是大部分场合不推荐这样做。
      

  7.   


    int CmysqlDatabase::UpdateBlob(Data_Param *para, FILE *f)
    {
    char query[1024*800],buf[1024*100],*p=NULL,cwhere[256];
    unsigned long blob_len;
    mysql_query(&mysql,"set names 'utf8'"); //这一行很重要,否则可能会上传失败
    sprintf(query,"update %s set %s = \'",para->tab_name, para->set_exp);
    p = query + strlen (query);
    unsigned int bufsize = sizeof(buf);
    while((blob_len = fread (buf, 1, bufsize, f)) > 0)
    {
    if(p + (2*blob_len) + 3 > query + sizeof (query))
    {
    TRACE("image too big\n");
    return false;
    }
    p += mysql_real_escape_string(&mysql, p, buf, blob_len);
    }
    *p++ = '\'';
    sprintf(cwhere," where %s",para->where_def);
    int wherelen = strlen(cwhere);
    memcpy(p,cwhere,wherelen);
    p += wherelen; unsigned long lsize = (unsigned long)(p-query);
    if(mysql_real_query(&mysql, query, lsize))
    {
    TRACE(((char*)mysql_error(&mysql)));
    return false;
    }
    TRACE(((char*)mysql_error(&mysql)));
    return true;
    }//下面是调用
    FILE *f;
    if((f = fopen(m_issue_picpath, "rb")) == NULL)
    {
    TRACE("file open eror!\n");
    m_issue_picpath = "照片文件打开失败!";
    UpdateData(FALSE);
    return;
    }
    theApp.mData.tab_name = "repair_process";
    strwhere.Format("RPId = \'%d\'",iInsertId);
    theApp.mData.where_def = (LPSTR)(LPCTSTR)strwhere;
    strExp.Format("RPIssuePic");
    theApp.mData.set_exp = (LPSTR)(LPCTSTR)strExp;if(theApp.mwipd.UpdateBlob(&theApp.mData,f))
    {
    TRACE("更新照片成功!\n");
    }
    else
    m_issue_picpath = "更新照片失败!";
    fclose(f);