【问题标题】:PDO MySQL querying independent of database structurePDO MySQL 查询独立于数据库结构
【发布时间】:2013-11-03 18:46:38
【问题描述】:

要使用 PDO 与 MySQL 数据库交互,假设命名占位符,需要一些数据库结构知识:

$db->("INSERT INTO table (firstname, lastname, age) value (:fn, :ln, :age)");

有没有一种方法可以在没有此类知识的情况下使用带有命名占位符的预准备语句,从而允许更改表结构而无需更改代码。或者,有没有办法查询数据库的表结构?

【问题讨论】:

  • 我无法解决您的问题。命名占位符与这个问题有什么关系?
  • 你需要知道表中各列的名称
  • 我正在尝试找到一个通用的流程抽象解决方案,而不需要特定于数据库的信息来设置它
  • 好吧,但命名占位符不是列的名称
  • 使用 desc 表动态获取结构。那当然是 mysql。

标签: php mysql sql database pdo


【解决方案1】:

一个解决方案是观察你的商业模式:

select 
    column_name,
    column_type
from 
    information_schema.columns 
where 
    table_schema = 'yourschema'
and table_name = 'yourtable';

解析这个结果,并使用 php.ini 即时构建插入查询。使用column_type 信息,您可以在绑定值时映射 PDO::XXX 数据类型。

【讨论】:

  • 请在此展开
  • 我对 MySQL 数据库的内部机制不是很熟悉
  • 这将返回给定模式之一中给定表的所有列名称和类型。像 php 中的任何其他 pdo 查询一样执行它,获取结果 (while ($row = $db->fetch()) {}) 以动态构建插入查询 ('INSERT INTO TABLE (' . $row['column_name'] . '...')
  • 您还需要提前知道要插入的值类型。你没有在你的问题中提到它。
  • 你可以从 columns 表中获取 column_type 。还是你的意思是别的?
猜你喜欢
  • 2016-09-03
  • 1970-01-01
  • 2013-08-23
  • 2012-06-17
  • 2015-05-31
  • 2011-07-01
  • 1970-01-01
  • 2012-02-11
  • 2021-11-14
相关资源
最近更新 更多