使用PHP / PDO存储/选择多个表中的行

时间:2013-04-22 18:10:56

标签: php mysql pdo

我知道如何从单个表中选择行并存储在数组中:

<?php
    include "db.php";
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * from chars";
    $stmt = $conn->prepare($sql);
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $bows = array();
    if ($stmt) {
        try {
            $stmt->execute();
            while ($row = $stmt->fetch()) {
                $chars[] = $row;
            }
        }
        catch (PDOException $e) {
            var_dump($e);
        }
    }
?>

但是如果我有多个表,我该怎么做呢,即。 charsitemsbases等,我想为每个使用不同的选择查询并存储在不同的数组中?

编辑:表格没有相关字段。

4 个答案:

答案 0 :(得分:0)

如果您只是想将多个查询的结果存储在不同的数组中,请使用不同的查询和数组执行相同的操作。如果要跨表捕获数据,根据需要,您可以修改查询以使用连接。

答案 1 :(得分:0)

如果这些表完全不相关,并且您想要将所有数据中的所有数据提取到三个单独的数组中,则需要三个单独的select语句。

如果表格相关,您可以使用JOIN。

例如,如果表 具有 列ID ,并且表 基础 * item_id * ,引用项目中的 id 列,您可以获取组合数据:

 SELECT * from items
 INNER JOIN bases ON items.id=bases.item_id;

这是你在找什么?如果没有,请提供更多信息,我会修改我的答案。

答案 2 :(得分:0)

目前只使用您正在使用的相同方法,但没有所有无用的代码:

<?php
include "db.php";

$stmt = $conn->prepare("SELECT * from chars");
$stmt->execute();
$chars = $stmt->fetchAll();

$stmt = $conn->prepare("SELECT * from items WHERE id=?");
$stmt->execute(array($id));
$item = $stmt->fetch();

$stmt = $conn->prepare("SELECT name FROM bases WHERE id=?");
$stmt->execute(array($id));
$base = $stmt->fetchColumn();

等等

答案 3 :(得分:-1)

你可以写一个函数

<?php
include "db.php";
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

function getArr($vartable) {
  global $conn;
  $sql = "SELECT * from ".$vartable;
  $stmt = $conn->prepare($sql);
  $stmt->setFetchMode(PDO::FETCH_ASSOC);
  $ars = array();
  if ($stmt) {
    try {
        $stmt->execute();
        while ($ars[] = $stmt->fetch());
    }
    catch (PDOException $e) {
        var_dump($e);
    }
  }
return $ars;
}

$chars = getArr("chars");
$items = getArr("items");
$bases = getArr("bases");

?>