2011-03-18 52 views
2

我写这篇文章的查询和它的主要错误是什么问题呢?问题准备发言

prepare test from 
'select * from ?'; 

什么问题?

什么是它的正确形式?

回答

4

你不能只是把你喜欢的地方的占位符。参数占位符只能出现在通常需要表达式的语句中的那些地方。特别是,您不能使用参数占位符来参数化标识符或整个语句结构。这就是为什么你的尝试失败。在Roland Bouman's blog -> MySQL 5: Prepared statement syntax and Dynamic SQL可以找到有关准备语句和动态SQL MYSQL

还有更多有用的东西。

如果你的使用目的是一样的东西:

prepare test 
    from 
    'select * from ?' ; 
set @myt := 'myTable' ; 
execute test 
    using @myt ; 

它根本不起作用。但你可以绕过它:

set @myt := 'myTable' 
set @qtext := concat('select * from ',@myt) ; 
prepare test 
    from @qtext ; 
execute test ; 
1

我从来没有尝试具有表名作为一个变量。我不确定这是否允许。请尝试以下操作:

PREPARE test FROM "SELECT * FROM table_name WHERE column = ?"; 

由于您没有提供错误消息,因此这是在黑暗中刺中的一种。

+0

这是一个很好的例子,可以在预处理语句中使用'?'。 – 2011-03-18 21:21:07

+0

@ypercube嗯,很高兴知道我是对的,但你的答案肯定是优越的。唯一缺少恕我直言的地方是指明你可以做什么和不可以做什么的一个链接。 – 2011-03-19 12:34:38

+0

哦,我忘了添加一个博客文章,彻底解释这个问题以及其他很多关于准备语句的技巧。我现在就添加它。 – 2011-03-19 14:21:01