0

アプリケーションをmysqlからpostgresqlに移植しました。そうすることで、ほとんどの場合、単語の区切り文字としてアンダースコアを使用するように変更されたキャメルケースの列名。キャメルケースが取り外されたばかりのカップルがいます。

次に、これらのデータベースの両方に挿入する必要があります。データ、列数などは同じですが、列名が少し異なります。PDOを使用してデータベースドライバーを切り替えて挿入することはできますが、idは、挿入用に2つの別個のSQLステートメントを記述せずにこれを実行したいと考えています。列名を配列キーにマップする、またはクラスにデータを入力してそれをPDOに渡す一般的な方法はありますか?

4

2 に答える 2

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
}

これに似たものが機能するはずです

于 2013-01-16T00:32:18.353 に答える
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_nameこれで、ordinal_position両側を見て、新しい列名と古い列名の間のマッピングテーブルを簡単に作成できます(Postgres名がプライマリであると想定しています)。テーブルごとに個別に実行することも、一度にすべて実行することもできます(table_name制約を削除するだけです)。

マッピングがわかった後、MySQLに対するSQLステートメントで列名を使用する必要がある場合は、このマップを介して列名を置き換える必要があります。

于 2013-01-16T00:59:13.367 に答える