2011-03-18 68 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