插入具有不同列名的mysql和postgresql

时间:2013-01-16 00:22:04

标签: php mysql database postgresql pdo

我将我的应用程序从mysql移植到postgresql。在这样做的情况下,在大多数情况下,更改为使用下划线作为单词分隔符。有几只骆驼案刚被移除。

我现在需要插入这两个数据库。数据,列数等是相同的,只是列名略有不同。我可以使用PDO来切换数据库驱动程序和插入,但id就像这样做而无需为插入编写两个单独的sql语句。是否有一种通用的方法将列名映射到数组键或填充某些类并将其传递给PDO。

2 个答案:

答案 0 :(得分:1)

$column_names[] = array('someName'=>'some_name');
$column_names[] = array('someOtherName'=>'some_other_name');
$column_names[] = array('someOtherNameAgain'=>'some_other_name_again');

foreach($column_names as $mysql=>$post_ogre)
{
   //decide which one you want to use here
}

类似于此的东西应该起作用

答案 1 :(得分:1)

您可以通过查看两个数据库都支持的INFORMATION_SCHEMA.COLUMNS表自动创建列名相关表。

首先,针对MySQL运行:

SELECT
    column_name,
    ordinal_position,
    data_type
FROM information_schema.columns
WHERE table_schema = 'mysql_dbname'
  AND table_name = 'mytable'

然后,针对PostgreSQL运行几乎相同的查询:

SELECT
    column_name,
    ordinal_position,
    data_type
FROM information_schema.columns
WHERE table_schema = 'public'
  AND table_name = 'mytable'

现在,查看双方的column_nameordinal_position,您可以轻松地在新旧列名称之间创建映射表(假设Postgres名称是您的主要名称)。您可以单独为每个表执行此操作,也可以一次完成所有操作(只需删除table_name约束)。

在映射已知之后,当您需要在任何针对MySQL的SQL语句中使用列名时,您必须通过此映射替换它。