ラベル 覚書 の投稿を表示しています。 すべての投稿を表示
ラベル 覚書 の投稿を表示しています。 すべての投稿を表示

2013年5月26日日曜日

php+mdbファイルの取り扱いで困った

最近、作っているサイトにmdbで作られたDBの取り込みで困る事が多い。
ODBCデータソースとしてmdbファイルを登録すればアクセスできるようなので、既存のphpの記述を一部変更して試していると簡単に移行できるものもあれば、移行できなくて困る事もある。

phpにて、MDBファイルを読み込んだ際に、以下のような記述がうまくできなくて、困った困った。 

※mdbファイルは、ODBCデータソースとして登録済みの前提

$conn_id = odbc_connect($db_name,$db_user,$db_pass);
$sql = 'select * from table_name';
$result = odbc_exec($conn_id,$sql);

if(odbc_num_rows($result)){
//処理を実行(これが実行できない)
}

結論としては、「odbc_num_rows」が使えないという話ですが、phpマニュアルには以下の注記があります。

注意:
SELECT の後に利用可能な行の数を定義するために odbc_num_rows() を使用した場合、 多くのドライバにおいて、-1 が返されます。

最初は気にもしなかったのですが、これが原因でした。
アクセスのファイルは、MySQLにインポートしてから処理する方向で検討します。

2012年1月8日日曜日

MySQLでインポートする際の記述

phpMyAdminでデータをエクスポート後、インポートする際にスムーズにできなかった。
レコードが多いと途中でスクリプトが停止し、インポート不可でした。

慣れないコマンドラインからのインポートを行いました。

phpMyAdminでインポートした際には、300秒でスクリプトエラーになった作業が、コマンドラインでは5秒程度・・・。

記述はそんなに難しくなく、以下を実行しました。
ファイル名は、フルパス表記で指定します。
今回は、phpMyAdminでエクスポートしたsql文をそのままインポートして問題ありませんでした。


mysql -u ユーザー名 -p DB名 < インポートファイル名 Enter password:パスワード

2010年12月29日水曜日

組織やグループ等の階層構造をDBから読み込み表示する例

組織、グループ、カテゴリ等、階層構造を持っているデータをデータベースから読み込み、HTMLで表示するPHPのサンプルです。
意外と頭を悩ませたので、覚書として残しておきます。
ネットを探しても、クエリをその都度発行して表示する例はありましたが、何度もクエリを発行するのは避けたかったので、配列に一回読み込ませたものを表示するようにしております。

サンプルソースは、組織の階層構造を表示する例です。

DBには、以下3つのフィールドがあります。

code:組織のコード
parent:組織の親コード
section_name:部門の名称

サンプルソース
・SQLにて階層構造のデータを読み込み
・配列に格納
・配列から階層構造を吐き出し

<?php
db_connect();
$result = mysql_query($sql);
db_close();

while($result_array = mysql_fetch_array($result)){
$parent_code[$result_array['parent']][] = array($result_array['code'] => $result_array['section_name']);
}
mysql_free_result($result);

function display_tree($parent,$level){
global $parent_code,$html;
if(is_array($parent_code[$parent])){
foreach($parent_code[$parent] as $section){
foreach($section as $code => $section_name){
if($code <> $parent and $code <> 0){
$html .= str_repeat('  ',$level).$section_name.'
'."\n";
display_tree($code,$level+1);
}
}
}
}
}

display_tree(0,0);
echo $html;
?>

2010年9月6日月曜日

DBの修復

データベースが壊れる事があり、修復を行いました。

私が使用しているレンタルサーバーでは、DBの管理にphpMyAdminを使っています。

その関係から、修復に使用できないコマンドもありましたが、以下のコマンドで修復する事ができました。

repair table [table_name]

18万行のテーブルでしたが、20秒ほど待っていると修復できました。

2009年11月19日木曜日

WindowsXPの環境構築トラブル

WindowsXPで環境構築をする機会がありました。
Apacheのインストールは難なくできましたが、PHPインストール後にApacheが起動不可になってしまいました。

環境
Apache2.0.63と2.2.14
PHP5.2.11

ApacheとPHPはどちらもインストーラー(msiパッケージ)を使いました。

Apacheをインストールし、localhostにアクセス確認しましたが、問題なく表示できました。
その後、PHPをインストールしてApacheを再起動すると「The requested operation has failed」でApacheが起動できなくなりました。

Apacheのバージョンを変えても同症状でApache起動不可。
ApacheやPHPのインストール先をDドライブの直下に変更しても同症状。

最終的にはこれでした。
httpd.confに追記された、「PHPIniDir "d:/php/"」の「/(スラッシュ)」ではなく、「\(円マーク)」でした。
「PHPIniDir "d:\php\"」に書き換え、phpの動作が確認できました。

2008年5月11日日曜日

MySQLのバージョンを変更した際のトラブル

レンタルサーバーの環境に自宅合わせようとしたのですが、これが一筋縄でいかなかった。
MySQLのバージョンを上げるだけだったのだが・・・。

環境
OS:Windows Vista
Apache:2.0.63
php:5.2.5
MySQL:5.0.45から5.1.20

MySQL5.0.45をアンインストールし、MySQL5.1.20をインストールはすんなりと終わった。
しかし、phpMyAdminを開くと、下記の警告が出てくる。
「お使いの PHP MySQL ライブラリのバージョン 5.0.45 が MySQL サーバのバージョン 5.1.20 と異なります。これは予期しない不具合を起こす可能性があります。」

・・・。これは、そのままでも使えそうだけど、直しておいた方が後々は困らないかなと思い、直す方向でいろいろ試すことにした。

とりあえず、以下のようなものを試したが現象回避せず。
・PHPの再インストール
・プログラムのアンインストールからPHPの修復
・MySQLの再インストール
・MySQLの前バージョンのレジストリ(適当に)を削除
・他のMySQL5.0系をインストールし、アンインストール

ネットで対処方法を検索するが、回避方法が探せない。

しばらく瞑想し、無理かなーこれはPCリカバリしてから入れなおすしかないかなー・・・どうしよう・・・面倒だ・・・どうしよう・・・。
と思っていたが、あきらめずにphpのインストールフォルダを一通り理解しようと開いて眺めていると、MySQL関連のファイル「php_mysql.dll」、「libmysql.dll」が2つあった。
見つかった2つのファイルの古いバージョンがどこかに残っているかもしれないと想定し、ファイル検索をすると「libmysql.dll」がMySQLのインストールフォルダにあった。
2つのファイルを見比べるとファイルサイズや作成日が異なるので、明らかに違うファイルだ。

PHPのインストールフォルダにあるファイルをリネーム(バックアップ)し、MySQLにある「libmySQL.dll」をコピーしたら現象回避できた!(Apache再起動後)

思い起こしてみると、昔PHPやMySQLをインストールしたときに、このファイルをどこかにコピーした記憶がおぼろげにある。
最近はインストールする際にそのあたりの作業をしなくて手軽になった半面、バージョンアップでこのような状態になったかもしれない。

そのあたりを考慮しても今回の対処方法は、多分大丈夫だと思う(特に調べてない)が、もし同じようなトラブルに見舞われた際に参考になればと思います。

2008年5月10日土曜日

apacheでpathinfoを使う際の設定

apache2.0.63にて、ローカルのテスト環境を作った際にpathinfoが使えなくて困った困った。
どうやら初期値でMultiViewsが無効になった為に初期設定では使えなくなったようです。

httpd.confの337行目に「MultiViews」を追記して使えるようになりました。

httpd.confの337行目
Options Indexes FollowSymLinks MultiViews

apacheの1.3系では元々上記の設定になっているので、初期値で動作します。

Windows Vistaでapacheの1.3系が使えなかったので、apache2.0.63にすると上記設定が足りないので開けないページがいくつか出てしまいました。
pathinfoを使っている場合はapache2.0系にすると使えなくなる可能性があるので気をつけてください。