【问题标题】:How can I SELECT rows from a temporary table using PDO or MySqli?如何使用 PDO 或 MySqli 从临时表中选择行?
【发布时间】:2016-04-28 20:24:35
【问题描述】:

当我使用 mysql 或 pdo 时,以下查询在 phpMyAdmin 中有效,但在 php 脚本中无效。普通的选择查询可以从同一个 php 脚本中工作。

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

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

我在 stackoverflow 上读到,您不能将 pdo 用于多个查询。但是在this 问题中描述了两种方法,这两种方法都不适合我。

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

$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();
}

我尝试了stackoverflow上另一个答案建议的另一种方法,但它说该功能未知:

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

// works not with the following set to 0. You can comment this line as 1 is default
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);

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

try {
    $stmt = $db->prepare($sql);
    $stmt->execute();
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}

如何让这个查询从我的 php 脚本中获取结果?

【问题讨论】:

    标签: php mysql mysqli pdo


    【解决方案1】:

    一个一个地执行两个查询。

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

    没有理由不这样做。

    【讨论】:

    • 你让我很开心,效果很好,谢谢!!
    【解决方案2】:

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

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

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

    【讨论】:

    • 最上面的查询是我遇到的问题,下面两个sn-ps中的查询只是为了尝试。
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多