подготовить заявление - в чем здесь проблема - PullRequest
0 голосов
/ 10 октября 2009
DELIMITER $$

CREATE  PROCEDURE `Insert1`(IN NAME VARCHAR(100),IN valuees VARCHAR(100))   
BEGIN   
  SET @r = CONCAT('Insert into', NAME,'(name)','VALUES',valuees);   
  PREPARE smpt FROM @r;   
  EXECUTE smpt;   
  DEALLOCATE PREPARE smpt;   
END$$

DELIMITER ;

успешно компилируется ... но когда я выполняю, это вызывает у меня проблемы ...

**CALL Insert1('rishi','duyuu')**

Код ошибки: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать рядом с 'VALUESduyuu' в строке 1

Ответы [ 2 ]

1 голос
/ 10 октября 2009

Есть несколько проблем, сначала посмотрите, какой запрос вызвал функция CONCAT. Вы заметите, что это неверный запрос - 'Insert intorishi(name)VALUESduyuu'. Далее см. Документацию в PREPARE / EXECUTE и используйте заполнитель для значения. Строка должна быть заключена в кавычки и экранирована, если вы хотите создать необработанную строку запроса. Так что попробуйте что-то вроде этого:

 SET @r = CONCAT('INSERT INTO ', NAME, ' (name) VALUES (?)');
 SET @v = valuees;
 PREPARE smpt FROM @r;
 EXECUTE smpt USING @v;

Кстати, вместо того, чтобы задавать здесь несколько небольших вопросов, возможно, вам следует задать вопрос более высокого уровня, объяснить, что вы пытались, что не удалось и т. Д. Проще помочь вам с проблемами высокого уровня, но если вы делаете что-то неправильно и задаете небольшие технические вопросы, как это исправить, чтобы это работало неправильно, это вам не сильно поможет.

1 голос
/ 10 октября 2009

Добавить пробелы к объединению:

CONCAT('Insert into ', NAME,'(name)',' VALUES ',valuees);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...