2017-08-20 32 views
0

我有以下簡單的表結構和事先準備好的聲明:MySQL的準備報告問題

create table junk1(name varchar(10), state varchar(10)); 
create table junk2(state varchar(100)); 
insert into junk2(state)values("state like '%Tex%'"),("state like '%Neb%'"),("state like '%Was%'"); 
insert into junk1(name, state) values ('asa', 'Texas'), ('dff', 'Washing'), ('fgfgf', 'Oklahoma'), ('bbb', 'Nevada'), ('hhh', 'Texas'), ('jjj', 'Nebraska'); 
SET @va = ''; 
select group_concat(state separator ' OR ') into @va from junk2; 
PREPARE stmt1 FROM 'select * from junk1 where ?'; 
execute stmt1 using @va; 
deallocate prepare stmt1; 

我沒有得到的結果如預期。我沒有得到任何結果。我在這裏做錯了什麼?

回答

0

您不能在預處理語句中使用語法元素作爲參數,即不能將整個where子句作爲參數傳遞,只能使用值。

你可能想連接您的where子句來代替:

select group_concat(state separator '" OR "') into @va from junk2; 
set @clause = concat('select * from junk1 where "', @va, '"'); 
PREPARE stmt1 FROM @clause; 
+0

你是個大BOSS。我不能直接使用concat,而是對你的答案做一個小的改動:而不是在prepare stmt中使用concat,我將它分配給另一個變量,如下所示:PREPARE stmt1 FROM @ba;執行stmt1 – BoCode

+0

好吧,不知道這一點,相應地改變我的答案 – Psi

+0

你是對的Psi ..我想通了,並接受你的答案..可以給你一千個祝福你。 – BoCode