投稿者 |
メッセージ |
|
< PHPプログラミング ~ 二つの異なるデータベース(MYSQL)から値を抽出して表示したい |
|
時間:
金 12月 01, 2006 2:53 pm
|
|
|
登録日: 2006年12月 01日
投稿記事: 2
|
|
はじめまして。blueblueと申します。
まだ、PHPをはじめたばかりなのですが、今あるソフトを改造しなければいけなくなりまして、お教えいただけないでしょうか?
PHP等のバージョンは次の通りです。
◇PHPのバージョン
PHP Version 4.3.10-18
◇mysqlのバージョン
Client API version 4.0.24
◇Apacheのバージョン
Apache Version Apache/1.3.33
◇OSのバージョン
Debian GNU/Linux
今回、二つの異なるデータベース(MYSQL)から値を抽出して、結合した結果を表示させなければいけないのです。
そこで、二つの異なるデータベースに接続して、移動元のデーターベースから値を抽出して、移動先のデータに書き込んでから結果を表示させたらよいかなと思って次のように書いてみました。
ところが、元のデータベースから値を抽出することまでは出来たのですが、そのデータを利用して、移動先のデータベースを書き換えるところで止まってしまいます。
多分私の書き方がまずいと思うのですが、どうしたらよいかわからなくて。。。
どなたかお教えいただけないでしょうか?
よろしくお願いいたします。
ーーーーーーー以下が書いたソースですーーーーーーー
//移動先データベース
$hostname = "localhost";
$uname = "USERNAME";
$upass = "PASSWORD";
$dbname = "DBNAME";
$tblname = "TABLENAME";
//元のデータベース
$hostname2 = "localhost";
$uname2 = "USERNAME2";
$upass2 = "PASSWORD2";
$dbname2 = "DBNAME2";
$tblname2 = "TABLENAME2";
/*両方(移動先、元)のテーブルのコンテンツ(MYSQL)
id MEDIUMINT,
name TEXT,
text TEXT,
address TEXT,
tel TEXT,
*/
//元のデータベースからデータを抽出
//MySQL に接続する。
if( !$res_dbcon2 = mysql_connect( $hostname2, $uname2, $upass2) ){
print "MYSQL への接続に失敗しました。";
exit;
}
//使用するDBを選択する。
mysql_select_db( $dbname2, $res_dbcon2 );
//SQL文を実行し、結果のリソースを取得。
$res_result2 = mysql_query( "SELECT * from {$tblname2}", $res_dbcon2 );
//問い合わせ結果を配列に格納。
$i = 0;
while( $row = mysql_fetch_array( $res_result2, MYSQL_ASSOC ) ){
$i = $i + 1;
//mysql_fetch_row と同じ結果になる。
$res = $row;
if( $i ==1){
$res_a = array();
$res_a = $res;
}
else{
$res_a = array($res_a, $res);
}
}
//移動先のデータベースへ抽出したデータを書き込み。
//MySQL に接続する。
if( !$res_dbcon = mysql_connect( $hostname, $uname, $upass) ){
print "MYSQL への接続に失敗しました。";
exit;
}
//使用するDBを選択する。
mysql_select_db( $dbname, $res_dbcon );
//抽出した配列($res_a)をすべて処理。
foreach( $res_a as $res_row2 ){
//配列($res_a)の要素($res_row)を配列に格納。
$res_row = array( $res_row2 );
//配列($res_row)の要素($res_row)を移動先データベースに書き込み。
$sql="UPDATE ".$dbname." SET ";
$sql.="id = ".$res_row["id"].", ";
$sql.="name = ".$res_row["name"].", ";
$sql.="text = ".$res_row["text"].", ";
$sql.="address = ".$res_row["address"].", ";
$sql.="tel = ".$res_row["tel"]." ";
$sql.="WHERE dir_name = ".$res_row["id"]."";
if( !$res_result = mysql_query( $sql, $res_dbcon ) ){
print "更新に失敗しました。";
exit;
}
}
//移動先のデータを表示
//SQL文を実行し、結果のリソースを取得。
mysql_select_db( $dbname, $res_dbcon );
$res_result = mysql_query( "SELECT * from {$tblname}", $res_dbcon );
//問い合わせ結果を配列に格納して表示。
while( $row = mysql_fetch_array( $res_result, MYSQL_ASSOC ) ){
var_dump( $row );
}
//MySQL への接続を切断する。
mysql_close( $res_dbcon );
mysql_close( $res_dbcon2 );
ーーーーーーーここまでーーーーーーー |
|
|
|
|
|
|
|
時間:
土 12月 02, 2006 1:03 am
|
|
|
登録日: 2006年12月 01日
投稿記事: 2
|
|
色々とやってみた結果、間違いにきづきまして、問題が解決いたしました。
ありがとうございます。
結局、原因は、元データを抽出して、配列に収める際に、ソースを書きまちがえていたことと、
取得したデータを書き込む際に、配列の要素の変数にフィールド名を書いていたせいでした。
ご報告まで、成功したソースは下記のとおりです。
今回は本当にお騒がせしまして、ご協力ありがとうございました。
ーーーーーーーー解決後のソースーーーーーーーー
//移動先データベース
$hostname = "localhost";
$uname = "USERNAME";
$upass = "PASSWORD";
$dbname = "DBNAME";
$tblname = "TABLENAME";
//元のデータベース
$hostname2 = "localhost";
$uname2 = "USERNAME2";
$upass2 = "PASSWORD2";
$dbname2 = "DBNAME2";
$tblname2 = "TABLENAME2";
/*両方(移動先、元)のテーブルのコンテンツ(MYSQL)
id MEDIUMINT,
name TEXT,
text TEXT,
address TEXT,
tel TEXT,
*/
//元のデータベースからデータを抽出
//MySQL に接続する。
if( !$res_dbcon2 = mysql_connect( $hostname2, $uname2, $upass2) ){
print "MYSQL への接続に失敗しました。";
exit;
}
//使用するDBを選択する。
mysql_select_db( $dbname2, $res_dbcon2 );
//SQL文を実行し、結果のリソースを取得。
$res_result2 = mysql_query( "SELECT * from {$tblname2}", $res_dbcon2 );
//********** 問い合わせ結果を配列に格納して表示。
$i = 0;
$res_a = array();
while( $row = mysql_fetch_array( $res_result2, MYSQL_ASSOC ) ){
$res_a[$i] = $row;
$i = $i + 1;
}
//移動先のデータベースへ抽出したデータを書き込み。
//MySQL に接続する。
if( !$res_dbcon = mysql_connect( $hostname, $uname, $upass) ){
print "MYSQL への接続に失敗しました。";
exit;
}
//使用するDBを選択する。
mysql_select_db( $dbname, $res_dbcon );
//抽出した配列($res_a)をすべて処理。
foreach( $res_a as $res_row2 ){
//配列($res_a)の要素($res_row)を配列に格納。
$res_row = array( $res_row2 );
//配列($res_row)の要素($res_row)を移動先データベースに書き込み。
$sql="UPDATE ".$dbname." SET ";
$sql.="id = ".$res_row[0].", ";
$sql.="name = ".$res_row[1].", ";
$sql.="text = ".$res_row[2].", ";
$sql.="address = ".$res_row[3].", ";
$sql.="tel = ".$res_row[4]." ";
$sql.="WHERE dir_name = ".$res_row[1]."";
mysql_query( $sql, $res_dbcon );
//移動先のデータを表示
var_dump( $row );
}
//移動先のデータを表示
//SQL文を実行し、結果のリソースを取得。
mysql_select_db( $dbname, $res_dbcon );
$res_result = mysql_query( "SELECT * from {$tblname}", $res_dbcon );
//問い合わせ結果を配列に格納して表示。
while( $row = mysql_fetch_array( $res_result, MYSQL_ASSOC ) ){
var_dump( $res_row );
}
//MySQL への接続を切断する。
mysql_close( $res_dbcon );
mysql_close( $res_dbcon2 );
ーーーーーーーここまでーーーーーーー |
|
|
|
|
|
|
|
|
新規投稿: 不可 返信: 不可t 自分の記事の編集: 不可 自分の記事の削除: 不可 投票への参加: 不可
|
|