我正在尝试从多个表的结果中创建一个临时表(相同的表结构)。在创建临时表并运行后续查询之后,我想将临时表中的结果存储在一个数组中,以便稍后在脚本/程序中访问。我试着找一个答案,似乎找不到答案。
我已经尝试过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);
我不确定为什么结果没有存储到数组中。据我所知,一切似乎都正确,并且在运行脚本时不会发生错误。我感谢任何人都可以提供的任何帮助。
更新 - 我发现了查询失败的原因。我在我试图创建的表名中使用了“ - ”,这是不允许的。
答案 0 :(得分:4)
您无法在一次->query()
来电中运行多个查询。这是底层PHP mysql驱动程序中的一个安全措施,用于防止某种形式的SQL注入攻击。与您使用的DB接口库无关,因为它们都使用相同的底层驱动程序。您必须单独运行每个单独的查询:
->query("DROP TABLE IF EXISTS ...");
->query("CREATE TEMPORARY TABLE ...");
->query("INSERT INTO ...");
etc...
答案 1 :(得分:1)
我试图在表名中创建一个带有“ - ”的表名。从表名中删除它后,所有查询都成功执行,我的PHP代码按预期工作。