php - 使用 PDO 从表 mySQL 制作模型

标签 php mysql pdo mustache mustache.php

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

每个 View 都有一个表,其中包含用于每个 View 的所有数据。我希望执行一个查询,以选择表中的每一列并使其可用于我的 mustache 模板。

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

这是我的 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 将适用于多行,但我想消除这种情况。

This is what my table <code>view_data_main</code> looks like:


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

 {
     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 * 不是选择所有 View 数据的传统方法,但是每个 View 表中的列数将少于 100 个最大值,并且除了 View 表之外没有其他表将使用通配符选择访问。也就是说,连同 View 之间的动态列名称意味着要编写的代码更少。我希望这不会冒犯任何人:)

谢谢大家的帮助。

最佳答案

这就是你想要的吗??

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)

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

关于php - 使用 PDO 从表 mySQL 制作模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145620/

相关文章:

php - 如何通过后台服务器访问Google Play Android Developer API

javascript - 将 js 变量发布到未在任何方法中运行的 PHP

php - 从三个表中进行 SQL SELECT,并在投票系统中进行排序

MySQL 条件子查询

php - 无法使用 PDO 将数据插入数据库

PHP PDO 唯一随机数生成器

php - HTML 电子邮件中的内联 CSS 中的双引号被转义

php - WordPress fatal error : Allowed memory size of 536870912 bytes exhausted (tried to allocate 77 bytes) in wp-includes/wp-db. php 第 1832 行

mysql - CakePHP 的多表通用查询模型

php - SQLSTATE[HY093] : Invalid parameter number: parameter was not defined - using greater than operator in SQL