方法一:
set @SQL ='select * from Test where id=?';
set @ID=1;
prepare stmt from @SQL;
execute stmt using @ID;方法二:
set @SQL ='select * from Test where id=@ID';
set @ID=1;
prepare stmt from @SQL;
execute stmt ;这两种写法执行起来有区别不?

解决方案 »

  1.   

    两种方法在变量的处理上有着本质上的不同。方法一: MYSQL会处理 'select * from Test where id=?';中的问号 用execute stmt using @ID;中的@ID的实际值也就是1来替换那个?,这样SQL语句为 select * from Test where id=1 然后execute stmt方法二: MYSQL在='select * from Test where id=@ID';没有任何需要替换的变量。这样当execute stmt ;直接执行的SQL语句就是select * from Test where id=@ID,而当前的变量中@ID为1最大的区别就是execute stmt的时候提交的SQL语句是不同的。 当然从结果上看没什么差别。
      

  2.   

    我不清楚为啥设计出 execute stmt using @ID 这种方法,感觉没啥用.
    如果using后面跟的是局部变量的话,还可以理解.用全局变量的话,直接写在SQL里面不就结了.