-1

我正在尝试从一个表中执行 SELECT *,该表的名称本身是从另一个查询中获取的。我想我把自己打成结了。这是我所拥有的:

SELECT options_table INTO @tableName FROM registrant_fields WHERE id = 9;

SET @sql_text_1 = concat('CREATE TABLE tmp_options LIKE ', @tableName);
PREPARE stmt_1 FROM @sql_text_1 ;
EXECUTE stmt_1;

SET @sql_text_2 = concat('INSERT tmp_options SELECT * FROM ', @tableName);
PREPARE stmt_2 FROM @sql_text_2;
EXECUTE stmt_2;

SELECT * FROM tmp_options;

DEALLOCATE PREPARE stmt_1;
DEALLOCATE PREPARE stmt_2;

所以...当我将这些内容粘贴到 PHPMyAdmin 并运行它时,我会分别获得每个语句的结果,并知道是的,我的“SELECT * FROM tmp_options;” 确实有一些行。但是我如何得到它们?

我要做的就是将该查询放入 PHP 字符串中并使用 mysqli_query() 运行它。那不行吗?

4

1 回答 1

1

我对 PHP 一无所知,但我碰巧知道 mysqli_query() 仅适用于一个 SQL 语句(出于安全原因)。

我建议你这样做(伪代码,SQL 部分除外)

somePHPvariableForTableName = ("SELECT options_table FROM registrant_fields WHERE id = 9;");
query("CREATE TABLE whyDoIneedAtmpTable AS SELECT * FROM $somePHPvariableForTableName");
query("SELECT * FROM whyDoIneedAtmpTable;");

就是这样。不需要额外的INSERT步骤。目前尚不清楚,为什么以及是否真的需要临时表。

于 2013-01-24T12:35:45.987 回答