DELIMITER $$;DROP PROCEDURE IF EXISTS `web_oa_database`.`search_problem`$$CREATE PROCEDURE `web_oa_database`.`search_problem` (
in p_id int,
in tm1 varchar(50),
in tm2 varchar(50),
in k_ft varchar(100),
in p_tp varchar(50),
in k_pb varchar(200),
in p_gd varchar(20),
in p_ic varchar(200),
in s_t varchar(30)
)
BEGIN
  declare str varchar(2000);
  set str='';
  if p_id<>0 then
     set str=concat(' where data083.pid=',p_id);
  end if;
  if tm1<>'' then
    if str='' then
     set str=concat(' where data083.ftm>=',tm1,' and data083.ftm<=',tm2);
    else
     set str=concat(str,' and data083.ftm>=',tm1,' and data083.ftm<=',tm2);
    end if;
  end if;
  if k_ft<>'' then
     if str='' then
     set str=concat(' where data083.kft like',' %',k_ft,'%');
    else
     set str=concat(str,' and data083.kft like',' %',k_ft,'%');
    end if;
  end if;
  if p_tp<>'' then
     if str='' then
     set str=concat(' where data083.ptp=',p_tp);
    else
     set str=concat(str,' and data083.ptp=',p_tp);
    end if;
  end if;
  if k_pb<>'' then
     if str='' then
     set str=concat(' where data083.kpb like', ' %',k_pb,'%');
    else
     set str=concat(str,' and data083.kpb like',' %',k_pb,'%');
    end if;
  end if;
  if p_gd<>'' then
      if str='' then
     set str=concat(' where data083.pgd=',p_gd);
    else
     set str=concat(str,' and data083.pgd=',p_gd);
    end if;
  end if;
  if p_ic<>'' then
     if str='' then
     set str=concat(' where data083.pic like',' %',p_ic,'%');
    else
     set str=concat(str,' and data083.pic like',' %',p_ic,'%');
    end if;
  end if;
  if s_t<>'' then
     if str='' then
     set str=concat(' where data083.st=',s_t);
    else
     set str=concat(str,' and data083.st=',s_t);
    end if;
  end if;
  set str=concat('select * from data083 ',str);
  
  SET @sql=str;    PREPARE stmt FROM @sql;    EXECUTE stmt;    DEALLOCATE PREPARE stmt;  END$$DELIMITER ;$$//错误提示很明了:DBAccess.execQuery()Unknown column '??“???è??è??' in 'where clause',但是检查了半天,没有发现表列名有误。就怀疑是sql语句拼接出了问题,一时间也找不出来,望高手能看下,指点下错误,不胜感激,谢谢!

解决方案 »

  1.   

    对mysql不熟悉,建议转到mysql板块。
      

  2.   

    提示貌似是说有未知的列??你好好检查一下吧,找不到就去MYSQL版块去问问,这里熟悉Mysql的人不怎么多
      

  3.   

    SQL语句内容是什么,检查一下字符集设置
    show variables like 'char%';
      

  4.   

    SET @sql=str;   
    select @sql;
      PREPARE stmt FROM @sql;     EXECUTE stmt;   
    看看生成的SQL语句是什么。
      

  5.   

    在MYSQL中能否运行,加上SELECT @sql,看看内容是什么,show variables like 'char%';
      

  6.   

    mysql中 select @sql 是不能查看的。
      

  7.   

    {call search_problem('0','','','','结构设计','','','','')}DBAccess.execQuery()Unknown column '??“???è??è??' in 'where clause'
      

  8.   

    错误提示:{call search_problem('0','','','','结构设计','','','','')}DBAccess.execQuery()Unknown column '??“???è??è??' in 'where clause'
      

  9.   

    确定吗? 加上在MYSQL中调试一下,看看能否得到结果
      

  10.   

    调试所产生的查询语句
    select * from data083  where data083.ptp=结构设计
    上面sql不能正常执行,字符编码错误,下面sql加上单引号后可正常执行了,
    select * from data083  where data083.ptp='结构设计'
    由此是否可推断sql在拼接时传入的变量值是要加单引号的呢?
      

  11.   

    由此是否可推断sql在拼接时传入的变量值是要加单引号的呢?
    要加,示例
    set str=concat(str,' and data083.st=','\'',s_t,'\'');
      

  12.   


    当然需要加单引号。 确保生成的SQL本身是正确的。