【问题标题】:SQLite3 Query to list all tables in database only shows one tableSQLite3查询列出数据库中的所有表只显示一个表
【发布时间】:2013-08-01 15:05:04
【问题描述】:

我需要能够读取 SQLite 数据库中的所有表,而无需知道这些表将被调用什么。我正在处理以下 example.db

chinhook.db

表格

专辑, 艺术家, 顾客, 员工, 类型, 发票, 发票行, 媒体类型, 播放列表, 播放列表轨道, 跟踪。

目前,我正在使用以下...

<?php
    $db = new SQLite3('db/chinhook.db');
    $tablesquery = $db->query("SELECT name FROM sqlite_master WHERE type='table';");
    $tables = $tablesquery->fetchArray(SQLITE3_ASSOC);

    foreach($tables as $name){
       echo $name.'<br />';
    }
?>

我似乎只能得到第一张桌子的名字。我可以从其他表中调用数据没有问题,但是 sqlite_master 表只包含一个表名。网上的其他人似乎报告这种方法是成功的。有什么想法吗?

提前致谢。

【问题讨论】:

  • fetchArray() 方法是做什么的?
  • 标准 SQLite3 方法,用于获取查询结果并将它们放入数字或关联数组(或两者)。类似于 mysql_fetch_array 的方式。 php.net/manual/en/sqlite3result.fetcharray.php
  • 那么,应该将多少条记录提取到数字或关联数组中?

标签: php sqlite


【解决方案1】:

试试这个:

<?php
    $db = new SQLite3('db/chinhook.db');
    $tablesquery = $db->query("SELECT name FROM sqlite_master WHERE type='table';");

    while ($table = $tablesquery->fetchArray(SQLITE3_ASSOC)) {
        echo $table['name'] . '<br />';
    }
?>

【讨论】:

  • ->fetch 似乎不是 SQLite3 中的方法调用未定义的方法 SQLite3Result::fetch()
  • 是的,那是我的错。 fetch() 在 SQLiteDatabase 类中定义,但在您使用的 SQLite3 中没有定义。
【解决方案2】:

在 PDO 方法中

$db  = new PDO('sqlite:Northwind.db');

$sql = "SELECT  `name` FROM sqlite_master WHERE `type`='table'  ORDER BY name";
  $result = $db->query($sql);
      if($result){
        while($row = $result->fetch(PDO::FETCH_ASSOC)){
          echo '<li>'.$row['name'].'</li>';
        }
    }


?>

【讨论】:

    【解决方案3】:

    仅供参考,如果您需要解析返回的 sql

    我为它实现了一个 sqlite 表解析器:

    https://github.com/maghead/sqlite-parser

    【讨论】:

      【解决方案4】:
      <?php
         $db = new SQLite3('db/chinhook.db');
         $tablesquery = $db->query("SELECT sql FROM sqlite_master WHERE name='foo'");
         $table = $tablesquery->fetchArray();
         echo '<pre>'.$table['sql'] . '</pre>';
         $db->close();
      ?>
      

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        相关资源
        最近更新 更多