проблема с подготовкой заявления - PullRequest
2 голосов
/ 18 марта 2011

Я пишу этот запрос, и он содержит ошибку, в чем проблема?

prepare test from
'select * from ?';

в чем проблема?

что это за правильная форма?

Ответы [ 2 ]

4 голосов
/ 18 марта 2011

Вы не можете просто разместить заполнитель там, где вам нравится.Заполнители параметров могут появляться только в тех местах внутри оператора, где вы обычно ожидаете выражения.В частности, нельзя использовать заполнители параметров для параметризации идентификаторов или целых структур операторов.Вот почему ваша попытка не удалась.

В блоге Roland Bouman -> MySQL 5: Синтаксис подготовленного оператора и Dynamic SQL . * Можно найти много других полезных вещей, касающихся подготовленных операторов и динамического SQL в MYSQL.1005 *

Если вы планируете использовать что-то вроде:

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 голос
/ 18 марта 2011

Я никогда не пытался использовать имя таблицы в качестве переменной.Я не уверен, что это разрешено.Попробуйте следующее:

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

Это своего рода удар в темноте, поскольку вы не предоставляете сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...