如何使用PDO或MySqli从临时表中选择行?

时间:2016-01-22 09:32:38

标签: php mysql mysqli pdo

以下查询在phpMyAdmin中有效,但在我使用mysql或pdo时都不能从php脚本中运行。正常的选择查询可以使用相同的PHP脚本。

abc   hij   klm
def   pqr   hij
mmm   fgf   hgt
yyt   ghf   jkw

我在LAMP服务器上安装了PHP版本5.5.0和mysqlnd 5.0.11-dev。

我在stackoverflow上读到你不能使用pdo进行多次查询。然而,在this问题中,描述了两种方法,这两种方法都不适用于我。

我尝试使用此设置,但它不起作用:

CREATE TEMPORARY TABLE tmptable1 (INDEX myindex (sid)) SELECT * FROM `table1` WHERE uid = 55 ORDER BY cc; 
SELECT * FROM tmptable1 GROUP BY sid;

我尝试了另一种关于stackoverflow的答案建议的另一种方法,但它说该函数未知:

$db = new PDO("mysql:host=localhost;dbname=test", 'root', '');

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

$sql = "
DELETE FROM car; 
INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
INSERT INTO car(name, type) VALUES ('car2', 'coupe');
";

try {
    $db->exec($sql);
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}

如何从我的php脚本中获取此查询以获取结果?

2 个答案:

答案 0 :(得分:2)

逐个执行两个查询。

$db->query($query1);  // Create temporary table
$db->query($query2);  // Fetch from it

没有理由不这样做。

答案 1 :(得分:1)

临时表仅在同一连接中可用。一旦连接被销毁/关闭,在此连接期间创建的临时表也是如此。

在你的脚本中,我没有看到tmp表的创建,这是否意味着你在另一个脚本中创建它并因此连接?

是的,我建议你做三个单独的查询。即使你找到了一种方法来做所有三合一。这不太可能导致性能问题,但您肯定会获得代码清晰度。