4

我正在尝试从多个相似的表(相同的表结构)的结果中创建一个临时表。创建临时表并运行后续查询后,我想将临时表的结果存储在一个数组中,以便稍后在脚本/程序中访问。我曾尝试寻找答案,但似乎找不到答案。

我已经尝试过 nextRowset() 以及分离查询,但似乎没有任何工作像我期望的那样工作。

这是我的代码:

$pdo = new PDO("mysql:host=".$_SESSION['server'].";dbname=data".$_SESSION['sysident'],$user,$pass);
$stmt = $pdo->prepare("DROP TABLE IF EXISTS $tabletocreate;
                CREATE TEMPORARY TABLE $tabletocreate LIKE table1;
                INSERT INTO $tabletocreate (SELECT * FROM table1 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table2 WHERE (MISC LIKE '%:memno%' OR MEMNO = :memno)) UNION (SELECT * FROM table3 WHERE (MISC  LIKE '%:memno%' OR MEMNO = :memno)) ORDER BY SLIPNO;
                SELECT * FROM $tabletocreate");
$stmt->bindParam(":memno",$_SESSION['memno']);
$stmt->execute();

$stmt->nextRowset();

$test = $stmt->fetchAll();
print_r($test);

我不确定为什么没有将结果存储到数组中。据我所知,一切似乎都是正确的,并且在运行脚本时没有发生错误。我感谢任何人可以提供的任何帮助。

更新 - 我发现了为什么查询不起作用。我在尝试创建的表名中使用了“-”,这是不允许的。

4

2 回答 2

4

您不能在一次->query()调用中运行多个查询。这是底层 PHP mysql 驱动程序中的一项安全措施,以防止某种形式的 SQL 注入攻击。您使用哪个数据库接口库无关紧要,因为它们都使用相同的底层驱动程序。您必须分别运行每个单独的查询:

->query("DROP TABLE IF EXISTS ...");
->query("CREATE TEMPORARY TABLE ...");
->query("INSERT INTO ...");
etc...
于 2013-08-29T16:46:56.760 回答
1

我试图在表名中创建一个带有“-”的表名。从表名中删除后,所有查询都成功执行,我的 PHP 代码按预期工作。

于 2013-08-30T14:34:32.437 回答