MySQL. Как добавить динамическое имя поля в хранимую процедуру? [Дубликат]

О Боже! Я только что видел ваше опубликованное изображение снова, вы просто открываете свой php-файл в браузере. у вас есть open, использующий localhost url. если вы открываете файл непосредственно из своего каталога, он не будет выполнять php-код в любом случае.

use: http://locahost/index.php или http:127.0.0.1/index.php

включить php-код в вашем случае , вы используете <?, который является коротким кодом php для <?php

, по умолчанию короткие короткие коды php отключены.

также используют: sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt, если вы являетесь пользователем ubuntu .

5
задан Shaiful Islam 18 December 2014 в 09:58
поделиться

3 ответа

Использование динамических имен таблиц в запросе лучше всего с помощью Prepared Staments , также в mysql для конкатенации функция concat

SET @id := '47';
SET @table := concat(@id,'_2013_2014_voucher');
set @qry1:= concat('select * from ',@table);
prepare stmt from @qry1 ;
execute stmt ;

Вы можете это сделать для запроса на удаление также

7
ответ дан Abhik Chakraborty 20 August 2018 в 19:03
поделиться

попробуйте изменить эту строку с помощью

SET @table = '`' + @id+'_2013_2014_voucher`';

, как правило, я объявляю переменную таким образом

SET @id = '47'; (без :)

вы должны используйте только : с SET, := для назначения переменной в SELECT

0
ответ дан faby 20 August 2018 в 19:03
поделиться

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

Также, чтобы поместить строки вместе, вы должны использовать CONCAT().

О, и вам нужно сделать все это в хранимой процедуре.

Создайте такой вот:

DELIMITER $$
CREATE PROCEDURE sp_exec_dynStmt()
BEGIN
SET @id := 47; /*The single-quotes made it a string, that's not necessary*/
SET @table := CONCAT(@id, '_2013_2014_voucher');

SET @sql := CONCAT('SELECT * FROM ', @table, ';');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = CONCAT('DELETE FROM ', @table, ' WHERE id = ?;'); /*The id can be a parameter, but not the table name*/
PREPARE stmt FROM @sql;
EXECUTE stmt USING @id; 
END $$
DELIMITER ;

Затем выполните его следующим образом:

CALL sp_exec_dynStmt();
5
ответ дан fancyPants 20 August 2018 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: