久々に更新。
ブログやってたのを忘れるくらい久々に更新w
忙しすぎて手が腱鞘炎になっちゃうし、まだまだ忙しいのは終わらんね;
ある案件でハマりにハマったので書いとく。
日本語の文献も少ないし、誰かのためになれば・・・
Linux+PHP+Access
PHPでAccessファイルを読まなきゃならんことになった。
そいつをMySQLにデータ吐き出しして利用する。
思いつくいたのは、ODBCでAccessファイルに接続すると言うもの。
まず、MdbTools を インストールする。
https://github.com/brianb/mdbtools
まぁこれはすんなり行きました。
odbc.ini
odbcinst.ini
など色々いじって。
次にPHPのPDOを使って接続する。
何とかDBには接続できた。
SQLを投げる・・・
・・・・
・・・・
空
何度やってもダメ、どう設定を変えてもダメ。
PHPをオプションを変えて何度もコンパイルしなおしたがダメ。
試しに id, name カラムが 3行程度のサンプルテーブルを作成
table1
「SELECT * from table1」を投げて帰ってきたのが以下の内容
array(
[0]=array(
[id] = 1,
[name] =
),
[0]=array(
[id] = 2,
[name] =
)
);
ん?文字列がダメっぽい。
mb_convert系を試すも全滅
で、いろいろ調べると、マルチバイトが怪しい。
たまたま見つけた記事で、
MDBTools のコマンドで mdb-export なるものを発見!
はい。ここで、今までの全部忘れてください。
PDO?odbc_connect?そんなの必要ありません!
mdbtools さえあれば!
これでmdb(accdb)をCSV形式で吐き出せるとな!!!
試しにtable1を吐き出す。
# mdb-export test.mdb table1
id,name
1,"yamada",
2,"suzuki",
...
おお!!!
こいつを > output.csv に吐けばCSVが完成!!
なんて素晴らしい!!
あと、テーブル名一覧を吐き出す関数 mdb-tables も便利。
以下のコマンドで、
#mdb-tables test.mdb
table1 table2 ...
とスペース区切りでmdbに内包されているテーブル名が取れる。
PHPで
$tables = exec("mdb-tables file.mdb"); //table一覧取得
これをexplodeして配列化して、
foreachでループしてやりゃ後は好きにできるじゃん!
foreach($tables as $tbl){
$csv = array();
exec("mdb-export file.mdb $tbl", $csv);
}
*.accdb でも行けます。
ブログやってたのを忘れるくらい久々に更新w
忙しすぎて手が腱鞘炎になっちゃうし、まだまだ忙しいのは終わらんね;
ある案件でハマりにハマったので書いとく。
日本語の文献も少ないし、誰かのためになれば・・・
Linux+PHP+Access
PHPでAccessファイルを読まなきゃならんことになった。
そいつをMySQLにデータ吐き出しして利用する。
思いつくいたのは、ODBCでAccessファイルに接続すると言うもの。
まず、MdbTools を インストールする。
https://github.com/brianb/mdbtools
まぁこれはすんなり行きました。
odbc.ini
odbcinst.ini
など色々いじって。
次にPHPのPDOを使って接続する。
何とかDBには接続できた。
SQLを投げる・・・
・・・・
・・・・
空
何度やってもダメ、どう設定を変えてもダメ。
PHPをオプションを変えて何度もコンパイルしなおしたがダメ。
試しに id, name カラムが 3行程度のサンプルテーブルを作成
table1
id | name |
1 | yamada |
2 | suzuki |
「SELECT * from table1」を投げて帰ってきたのが以下の内容
array(
[0]=array(
[id] = 1,
[name] =
),
[0]=array(
[id] = 2,
[name] =
)
);
ん?文字列がダメっぽい。
mb_convert系を試すも全滅
で、いろいろ調べると、マルチバイトが怪しい。
たまたま見つけた記事で、
MDBTools のコマンドで mdb-export なるものを発見!
はい。ここで、今までの全部忘れてください。
PDO?odbc_connect?そんなの必要ありません!
mdbtools さえあれば!
これでmdb(accdb)をCSV形式で吐き出せるとな!!!
試しにtable1を吐き出す。
# mdb-export test.mdb table1
id,name
1,"yamada",
2,"suzuki",
...
おお!!!
こいつを > output.csv に吐けばCSVが完成!!
なんて素晴らしい!!
あと、テーブル名一覧を吐き出す関数 mdb-tables も便利。
以下のコマンドで、
#mdb-tables test.mdb
table1 table2 ...
とスペース区切りでmdbに内包されているテーブル名が取れる。
PHPで
$tables = exec("mdb-tables file.mdb"); //table一覧取得
これをexplodeして配列化して、
foreachでループしてやりゃ後は好きにできるじゃん!
foreach($tables as $tbl){
$csv = array();
exec("mdb-export file.mdb $tbl", $csv);
}
*.accdb でも行けます。