我写这个查询,它有错误是什么问题?
prepare test from
'select * from ?';
什么是问题?
这是什么形式的正确?
答案 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 = ?";
这是在黑暗中的一种刺,因为你没有提供错误信息。