2012-07-24 51 views
0

我试图构建下一个存储的proc,但它不工作。MYSQL - 准备stmt并执行stmt并添加WHERE和LIKE

PREPARE STMT FROM 'SELECT a, b, c, d, e FROM TABLE_1 WHERE (`a` like `%?%` OR `b` like `%?%` OR `c` like `%?%` OR `d` like `%?%` OR `e` like `%?%`) LIMIT ?, ?'; 
EXECUTE STMT USING @search, @skip, @rows; 

基本上,我试图搜索一列内的字符串,并返回适合列的行。 请帮我解决这个问题,因为我得到了一个错误:

Unknown column '%?%' in 'where clause' 
+0

变量的数量应该相当于问号的数量... – 2012-07-24 13:47:56

回答

0

这是因为多少?应该等于USING条款后的参数个数。你也有错误的报价?而不是"?"尝试:

PREPARE STMT FROM 'SELECT a, b, c, d, e FROM TABLE_1 WHERE (`a` like "%?%" OR `b` like "%?%" OR `c` like "%?%" OR `d` like "%?%" OR `e` like "%?%") LIMIT ?, ?'; 

EXECUTE STMT USING @search, @search, @search, @search, @search, @skip, @rows; 

,或者尝试

SET @query1 = CONCAT(' 
    SELECT SQL_CALC_FOUND_ROWS a, b, c, d, e 
    FROM TABLE_1 
    WHERE (`a` like "%',@search,'%" OR 
     `b` like "%',@search,'%" OR 
     `c` like "%',@search,'%" OR 
     `d` like "%',@search,'%" OR 
     `e` like "%',@search,'%") 
    LIMIT ',@skip,', ',@rows,''); 

    PREPARE stmt FROM @query1; 
    EXECUTE stmt; 
    SELECT FOUND_ROWS() AS total_rows; 
    DEALLOCATE PREPARE stmt; 
+0

没有解决问题:( – Alon 2012-07-24 13:32:38

+0

更改后,我收到错误“EXECUTE的错误参数” – Alon 2012-07-24 13:40:07

+0

尝试新的查询。 – Omesh 2012-07-24 13:41:44

0

尝试......

PREPARE STMT FROM 'SELECT a, b, c, d, e FROM TABLE_1 WHERE (`a` like "%?%" OR `b` like "%?%" OR `c` like "%?%" OR `d` like "%?%" OR `e` like "%?%") LIMIT ?, ?'; 

EXECUTE STMT USING @search, @search, @search, @search, @search, @skip, @rows; 

注意

的变量数应该等于我们有问号的数量。

你有7个问号,只有3个变量。所以错误发生在第四个?