使用 PDO 从 table mySQL 制作模型

making a model from table mySQL with PDO

我正在开发一个有趣的应用程序,我有意不在普通应用程序的客户端或服务器端使用除 mustache 之外的任何框架 PHP 和 JS 等。

每个视图都有一个 table,其中包含用于每个视图的所有数据。我希望执行 select 中 table 中每一列的查询,并使其可用于我的小胡子模板。

我不想为了在运行时访问任何特定列而更改方法。 fetchAll 在返回的数据中给了我大量我不想要的空字段,而 fetch() 给了我一个很好的 JSON 结构,其中包含除了包含多行数据的列之外的所有正确数据只显示对于第一个 row/instance。

这是我的 PHP 方法:

public function get_view($view_name , $out_type = "raw"){

                // Col names may vary from view table to view table

                $statement = $this->prep_sql("SELECT * FROM `$view_name`");

                $statement->execute(array());

                $view_data = $statement->fetch(); // I know fetchAll will work for arrays but how then will my mustache template bind to data returned from columns with more than one row?

                return (strtoupper($out_type) === "JSON" ? json_encode($view_data) :  $view_data);

            }

我想要的是忽略任何具有 null 或空的字段,就好像它们不存在一样,并在数据库中形成一个包含多行数据列的数组。我还意识到,对页面标题和 fetchAll 等单个实例使用 fetch 将适用于多行,但我想消除这一点。


为了使模板正确绑定,数据输出必须类似于:

 {
     module_name: 'main', 
     module_title: 'Main', 
     module_images: ['http://...', 'http://...', 'http://...'], 
     module_scripts: ['http://...','http://...','http://...',]
}

我得到的是 fetchAll

[{
    module_name: 'main',
    module_title: 'Main',
    module_images: 'http://...', // 1
    module_scripts: 'http://...' // 1
  }, {
    module_name: null,
    module_title: null,
    module_images: 'http://..', // 2
    module_scripts: 'http://..' // 2
}];

我知道 SELECT * 不是 select 所有视图数据的传统方式,但是每个视图中的列数 table 将少于 100 个最大值并且除了视图 table 之外,没有 table 将使用通配符 select 访问。也就是说,连同视图之间的动态列名称意味着要编写的代码更少。我希望这不会冒犯任何人:)

谢谢大家的帮助。

这就是你想要的吗??

CREATE TABLE view_data_main (
    module_name VARCHAR(30),
    module_title VARCHAR(30),
    module_images VARCHAR(30),
    module_scripts VARCHAR(30)
)

INSERT INTO `view_data_main` (module_name,module_title,module_images,module_scripts) VALUES 
('welcome','main','http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com')

SELECT module_name,module_title,GROUP_CONCAT(module_images),GROUP_CONCAT(module_scripts)
FROM `view_data_main`
WHERE module_images IS NOT NULL AND module_scripts IS NOT NULL
GROUP BY CONCAT(module_images,',',module_scripts)

重新阅读问题后,我认为子查询不是必需的,除非我遗漏了什么?