【问题标题】:Returning multiple SELECT queries in single array在单个数组中返回多个 SELECT 查询
【发布时间】:2015-10-29 15:24:02
【问题描述】:

我正在编写依赖于从 MySQL 数据库返回的数据的 angularjs 应用程序。

Angularjs 代码发出 HTTP 请求并将返回的数据记录到控制台:

$http({method: 'POST', url: 'php/return_something.php', headers: {'Content-Type': 'application/json'}})
    .success(function(data, status, headers, config) {
    //The API call to the back-end was successful (i.e. a valid session)
        console.log(data);
    })
    .error(function(data, status, headers, config) {
        console.log("Error.");
    });

return_something.php

try
{
    $conn = new PDO("mysql:host=".DB_HOST."; dbname=".DB_DATABASE, DB_USER, DB_PASSWORD);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = $conn->prepare("SELECT count(id_table_x) from table_x; SELECT count(id_table_y) from table_y;");
    $sql->execute();

    // set the resulting array to associative
    $results = $sql->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($results);
}

catch(PDOException $e)
{
    echo $sql . "<br />" . $e->getMessage();
}

$conn = null;

在控制台中记录了一个包含一个元素的数组。

[对象]

在这个对象内部有第一个查询的结果(“SELECT count(id_table_x) from table_x”)。

我应该改变什么才能看到第二个查询的结果(“SELECT count(id_table_y) from table_y”)作为这个数组的第二个元素?任何帮助表示赞赏。

【问题讨论】:

  • AFAIK PDO 不支持在单个准备好的语句中进行多个查询。

标签: php mysql angularjs http select


【解决方案1】:

您可以编写两个查询,这也更具可读性(恕我直言):

$sql = $conn->prepare("SELECT count(id_table_x) from table_x;");
$sql->execute();

$sql2 = $conn->prepare("SELECT count(id_table_y) from table_y;");
$sql2->execute();

$results[] = $sql->fetchAll(PDO::FETCH_ASSOC);
$results[] = $sql2->fetchAll(PDO::FETCH_ASSOC);

编辑: $results[] =$results.push() 的快捷方式。之前,您必须将 $results 定义为一个数组:

$results = array(); 

【讨论】:

    【解决方案2】:

    您不能在一个查询中创建多个 SELECT 语句。 另一种方式:

    SELECT count(id_table_x) from table_x UNION SELECT count(id_table_y) from table_y;
    

    SELECT "table_x" as tableName, count(id_table_x) as nbID from table_x UNION SELECT "table_y" as tableName, count(id_table_y) as nbID from table_y;
    

    你将这些数据

    tableName | nbID
    ==========|======
    table_x   | 6
    table_y   | 1
    

    完整代码:

    try
    {
        $conn = new PDO("mysql:host=".DB_HOST."; dbname=".DB_DATABASE, DB_USER, DB_PASSWORD);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = $conn->prepare('SELECT "table_x" as tableName, count(id_table_x) as nbID from table_x UNION SELECT "table_y" as tableName, count(id_table_y) as nbID from table_y;');
        $sql->execute();
    
        // set the resulting array to associative
        $results = $sql->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($results);
        /*
            [
                {'tableName':'table_x', 'nbID': 6},
                {'tableName':'table_y', 'nbID': 42}
            ]
        */
    }catch(PDOException $e){
        echo $sql . "<br />" . $e->getMessage();
    }
    
    $conn = null;
    

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 2012-12-31
      • 2023-01-28
      • 2014-10-21
      • 2010-10-20
      • 1970-01-01
      • 2018-06-17
      • 2020-10-26
      相关资源
      最近更新 更多