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, @skip, @rows;

基本的に、私は列の1つ内の文字列を検索し、適合する列を含む行を返そうとしています。次のエラーが発生するので、修正を手伝ってください。

Unknown column '%?%' in 'where clause'
4

3 に答える 3

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;
于 2012-07-24T13:26:34.723 に答える
0

mysqlの特定の例は、疑問符の数がパラメーターの数と同じである必要があることを示しているようです。

http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

私が間違っている?

あなたの場合、これは7つの疑問符と7つのパラメーターを意味します。

ではごきげんよう

于 2012-07-24T13:27:05.133 に答える
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つだけです。したがって、エラーは4番目に発生します?

于 2012-07-24T13:49:11.990 に答える