准备声明的问题

时间:2011-03-18 19:36:14

标签: mysql prepared-statement

我写这个查询,它有错误是什么问题?

prepare test from
'select * from ?';

什么是问题?

这是什么形式的正确?

2 个答案:

答案 0 :(得分:4)

您不能只在任何地方放置占位符。参数占位符只能出现在您通常期望表达式的语句中的那些位置。特别是,您不能使用参数占位符来参数化标识符或整个语句结构。这就是你尝试失败的原因。

Roland Bouman's blog -> MySQL 5: Prepared statement syntax and Dynamic SQL中可以找到关于MYSQL中的预处理语句和动态SQL的更多有用的东西。

如果您的预期用途如下:

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 :(得分:1)

我从未尝试将表名作为变量。我不确定这是允许的。请尝试以下方法:

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

这是在黑暗中的一种刺,因为你没有提供错误信息。