О Боже! Я только что видел ваше опубликованное изображение снова, вы просто открываете свой 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 .
Использование динамических имен таблиц в запросе лучше всего с помощью 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 ;
Вы можете это сделать для запроса на удаление также
попробуйте изменить эту строку с помощью
SET @table = '`' + @id+'_2013_2014_voucher`';
, как правило, я объявляю переменную таким образом
SET @id = '47';
(без :
)
вы должны используйте только :
с SET
, :=
для назначения переменной в SELECT
Вам нужно использовать подготовленные операторы для имени динамической таблицы. Подготовленные утверждения поддерживают параметры, но вы не можете использовать их для имен таблиц.
Также, чтобы поместить строки вместе, вы должны использовать 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();