2017-08-20 31 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