在存储过程中传递列字段

时间:2013-05-02 07:36:40

标签: php mysql stored-procedures

我在MYSQL中创建了一个存储过程。我将6个输入传递给存储过程。我有260列,列名为finewt_1,finewt_2,finewt_3 .... finewt_260。

我的存储过程是:

Create procedure GetImg($r35 double,
r36 double,
$r37 double, 
r38 double,
$r39 double, 
r40 double)

begin

select img_id,img_path,
((pow((r36-finewt_$r35),2))+(pow((r38-finewt_$r37),2))+(pow((r40-finewt_$r39),2))) as distance from tbl_fine

end

当我尝试从php调用此存储过程时,它给出了一个错误,指出找不到finewt_ $ r35。我想进行计算,如果假设$ r35 = 50我想要(r36-finewt_50)。我怎样才能做到这一点?这只是我的sql语句的一小部分我必须为30,000多个图像执行此操作,所以我不想使用另一个select语句。我该如何解决这个问题?

我尝试使用动态sql也收到错误消息:

Unknown column 'finewt_13' in 'field list'

我的动态sql是:

    Create procedure GetImg($r35 double,
    r36 double,
    $r37 double, 
    r38 double,
    $r39 double, 
    r40 double)

    begin

    Set @s=CONCAT('select img_id,img_path,
    ((pow((r36-',finewt_$r35,'),2))+(pow((r38-',finewt_$r37,'),2))+(pow((r40-finewt_$r39),2))) as distance from tbl_fine');
PREPARE stmt FROM @s;
    EXECUTE stmt;


    end

当我尝试这个时:

CONCAT(......(pow((r36-finewt_',$r35,'),2))+(pow((r38-finewt_',$r37,')),2)+(pow((r40-finewt_',$r39,'),2)).....

我收到错误:

Incorrect parameter count in the call to native function 'pow'

1 个答案:

答案 0 :(得分:0)

你需要连接字符串,

CONCAT(r36,'-finewt_',$r35)

编辑,

CREATE PROCEDURE `sp_my_proc`(reqdTable varchar(50))

set @table_name = reqdTable;
SET @sql_text = concat('SELECT ..blah blah' FROM',@table_name,'WHERE blah blah');

PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;