<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>QUOIT Blog &#187; mysql</title>
	<atom:link href="http://ken.quoit.jp/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://ken.quoit.jp</link>
	<description>Programming, OpenSource, HTML/CSS etc...</description>
	<lastBuildDate>Sat, 04 Feb 2012 17:18:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>mysql_select_dbの挙動が気に入らない</title>
		<link>http://ken.quoit.jp/2010/12/22/mysql_select_db%e3%81%ae%e6%8c%99%e5%8b%95%e3%81%8c%e6%b0%97%e3%81%ab%e5%85%a5%e3%82%89%e3%81%aa%e3%81%84/</link>
		<comments>http://ken.quoit.jp/2010/12/22/mysql_select_db%e3%81%ae%e6%8c%99%e5%8b%95%e3%81%8c%e6%b0%97%e3%81%ab%e5%85%a5%e3%82%89%e3%81%aa%e3%81%84/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 09:53:38 +0000</pubDate>
		<dc:creator>yakumo</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ken.quoit.jp/?p=589</guid>
		<description><![CDATA[何だかいろいろ試していたらあれ？ということにぶつかってしまったので、覚え書き。 解決策は考え中です。解決しました！ ※追記 10/12/22 19:50 Twitterでアドバイスを頂き、解決の方向性が見えてきました。 ※追記 10/12/23 14:00 Twitterで完全な解決策を頂きました！こしあんさんに感謝！ まず、簡単に状況説明から。 僕はphpからmysqlを使うために、DB用のクラスを作っています。 まぁ多くの方は持ってると思いますが。。 僕の場合はこんな感じ。 class DB{ var $db_encoding="UTF-8"; var $script_encoding="UTF-8"; #--------------------------- # constructer #--------------------------- function DB($host=HOST,$user=USER,$pass=PASS,$db=DBNAME){ # CONNECT MySQL if (!($mysql=mysql_connect($host,$user,$pass,TRUE))) { die("ERROR: HOST CONNECT FAILED"); } # CONNECT DB if (!(mysql_select_db($db,$mysql))) { die("ERROR: DB CONNECT FAILED"); } } #--------------------------- # class method #--------------------------- function [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>何だかいろいろ試していたらあれ？ということにぶつかってしまったので、覚え書き。<br />
<del datetime="2010-12-23T04:59:01+00:00">解決策は考え中です。</del>解決しました！</p>
<p><span style="font-size:10px;font-weight:bold;"><br />
※追記 10/12/22 19:50<br />
Twitterでアドバイスを頂き、解決の方向性が見えてきました。<br />
</span></p>
<p><span style="font-size:10px;font-weight:bold;"><br />
※追記 10/12/23 14:00<br />
Twitterで完全な解決策を頂きました！こしあんさんに感謝！<br />
</span></p>
<p><span id="more-589"></span></p>
<p>まず、簡単に状況説明から。</p>
<p>僕はphpからmysqlを使うために、DB用のクラスを作っています。<br />
まぁ多くの方は持ってると思いますが。。</p>
<p>僕の場合はこんな感じ。</p>
<pre name="code" class="php">
class DB{
	var $db_encoding="UTF-8";
	var $script_encoding="UTF-8";

	#---------------------------
	# constructer
	#---------------------------
	function DB($host=HOST,$user=USER,$pass=PASS,$db=DBNAME){
		# CONNECT MySQL
		if (!($mysql=mysql_connect($host,$user,$pass,TRUE))) {
			die("ERROR: HOST CONNECT FAILED");
		}
		# CONNECT DB
		if (!(mysql_select_db($db,$mysql))) {
			die("ERROR: DB CONNECT FAILED");
		}
	}

	#---------------------------
	# class method
	#---------------------------
	function exe($stmt){
	# Execute SQL
		if (!($data = mysql_query($stmt))) {
			echo mysql_error()."\n";
			var_dump($stmt);
			return false;
		}
		$result = Array();
		while($tmp = @mysql_fetch_assoc($data)){
			array_push($result,$tmp);
		}
		if( !empty ( $result ) ){
			return $result;
		}else{
			return TRUE;
		}
	}
}
</pre>
<p><span style="font-size:10px;">※emptyemptyってなってるのはWPプラグインのバグです。。</span></p>
<p>実際にはメソッドがやたらめったらあるので今は割愛。</p>
<p>まぁそんなに大それたことはやってません。</p>
<p>オブジェクト生成時にコンストラクタでmysql_connectを使って接続、そのあとメソッドでSQLを実行したりとか何とか。</p>
<p>いつも定数でDBへの接続情報を持っているのですが、引数で渡せば別のDBにも接続できるようになってます。</p>
<p>ふと今日、2つのDBに接続しようとして、以下のコードを書きました。</p>
<pre name="code" class="php">
$db = new DB();# DB Object
$db2 = new DB('localhost','user','password','hogedb');# DB Object

$db->exe("select * from db1table");
$db2->exe("select * from db2table");
</pre>
<p>ここで僕が期待した結果は、それぞれのDBから情報を引っ張ってくることでした。</p>
<p>しかし結果は「 Table &#8216;db1.db1table&#8217; doesn&#8217;t exist 」となって、最初のクエリが失敗。</p>
<p>今までは大概1つのDBに接続していたので気付かなかったのですが、2つのハンドラを生成した場合に後から生成されたDBハンドラに上書きされてしまったのです。</p>
<p>もっと正確に言うと、コンストラクタで使用していたmysql_select_db関数が情報を上書きしてしまい、DBを変更してしまうのです。</p>
<p>なんだ、僕の作り方が悪いんじゃないの、とも言えますが。。(´・ω・)</p>
<p>納得いかないのは、このmysql_select_db関数。</p>
<p>第二引数にmysql接続を渡すことで指定できるのに、後からの接続に情報を上書きされてしまう。</p>
<p>どうにも納得いかないんですが、どう回避したらいいのか思案中です。。。(´・ω・)</p>
<p><span style="font-size:10px;font-weight:bold;">※追記 10/12/22 19:40</span><br />
Twitterにも書いたんですが、実は今回のコードの回避策はあるにはあるのです。<br />
mysql_select_dbをメソッドexe()の最初に持ってくることで、実行前に毎回DBを選択すれば解決します。<br />
でもものっすごく気に入らないので別の回避策がないかなーと思っております。<br />
もし何か良い案があれば是非教えてください。。＞＜；</p>
<p><span style="font-size:10px;font-weight:bold;">※追記 10/12/22 19:50</span><br />
Twitterで<a href="http://twitter.com/debiru" target="_blank">debiru</a>氏にこんな助言を頂きました。</p>
<blockquote><p>
@yakumo27 クラス作ってオブジェクト思考型で処理したいなら、そもそも手続き型の関数を使うべきではないのではないでしょうか。PHP4前提だと少し難しいですね。私は PHP5.x での開発が主なので mysqli をよく用います。 <a href="http://bit.ly/gQyFvH" target="_blank">http://bit.ly/gQyFvH</a><br />
<a href="http://twitter.com/debiru/statuses/17532553573441536" target="_blank">元発言はこちら</a>
</p></blockquote>
<p>恥ずかしながら、mysqliは利用したことがなかったので未知の領域でした。<br />
環境がPHP5.xなのであれば有効なのかも。<br />
この問題はアドバイス頂いた方向で解決してみたいと思います。</p>
<p><span style="font-size:10px;font-weight:bold;">※追記 10/12/23 14:00</span><br />
Twitterで<a href="http://twitter.com/alphabet_h" target="_blank">こしあんさん</a>にこんなメッセージを頂きました！</p>
<blockquote><p>@yakumo27 ちょっと書きなおしてみました、こんな感じでどうでしょ。 <a href="https://gist.github.com/752467" target="_blank">https://gist.github.com/752467</a><br />
<a href="http://twitter.com/alphabet_h/status/17768052959485952" target="_blank">元発言はこちら</a>
</p></blockquote>
<blockquote><p>@yakumo27 多分、コネクション（$mysql）を省略していたので、最初に作ったコネクションを自動的に使ってしまってるのではないかなぁと思います。件のソースでは問題なく動きましたー＠自分の環境<br />
<a href="http://twitter.com/alphabet_h/status/17801781971001344" target="_blank">元発言はこちら</a>
</p></blockquote>
<p>全くもってそのとおりでした！</p>
<p><a href="https://gist.github.com/752467" target="_blank">こしあんさんが解決してくださったソース</a>を見るとわかるのですが、コネクションをメンバ変数に割り当てて、mysql_queryの引数に明示的にコネクションを渡しています。<br />
元の僕のソースではこれを省略してしまってたんですね。</p>
<p>いやはやこんなことに気付いてくださってソースまで書いてくださって、こしあんさんに感謝です！</p>
<p>こしあんさんの技術ブログは<a href="http://blog.livedoor.jp/petaweb/" target="_blank">こちら</a>。</p>
<div class="shr-publisher-589"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://ken.quoit.jp/2010/12/22/mysql_select_db%e3%81%ae%e6%8c%99%e5%8b%95%e3%81%8c%e6%b0%97%e3%81%ab%e5%85%a5%e3%82%89%e3%81%aa%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysqlのtimestamp型</title>
		<link>http://ken.quoit.jp/2009/09/10/mysql%e3%81%aetimestamp%e5%9e%8b/</link>
		<comments>http://ken.quoit.jp/2009/09/10/mysql%e3%81%aetimestamp%e5%9e%8b/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 06:21:04 +0000</pubDate>
		<dc:creator>yakumo</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[timestamp]]></category>

		<guid isPermaLink="false">http://ken.quoit.jp/?p=98</guid>
		<description><![CDATA[注意: バージョン 4.1 以降、TIMESTAMP は &#8216;YYYY-MM-DD HH:MM:SS&#8217; 形式の文字列として返されます。その他のタイムスタンプ長のサポートは中止されました。 そうだったのかー 「YYYYMMDDHHMMSS」になってたのは追加開発してるシステムの環境がバージョン4.0xだったからか。 全然知らなかった。 知らないことがあまりに多すぎて、どこから知ればいいのかわからん。 なので、なるべく全部知ろうとする浅はかさ。 ま、いっか。]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><blockquote><p>
注意: バージョン 4.1 以降、TIMESTAMP は &#8216;YYYY-MM-DD HH:MM:SS&#8217;  形式の文字列として返されます。その他のタイムスタンプ長のサポートは中止されました。
</p></blockquote>
<p>そうだったのかー</p>
<p>「YYYYMMDDHHMMSS」になってたのは追加開発してるシステムの環境がバージョン4.0xだったからか。</p>
<p>全然知らなかった。</p>
<p>知らないことがあまりに多すぎて、どこから知ればいいのかわからん。</p>
<p>なので、なるべく全部知ろうとする浅はかさ。</p>
<p>ま、いっか。</p>
<div class="shr-publisher-98"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://ken.quoit.jp/2009/09/10/mysql%e3%81%aetimestamp%e5%9e%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP4とMYSQL</title>
		<link>http://ken.quoit.jp/2009/09/08/php4%e3%81%a8mysql/</link>
		<comments>http://ken.quoit.jp/2009/09/08/php4%e3%81%a8mysql/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 08:13:55 +0000</pubDate>
		<dc:creator>yakumo</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ken.quoit.jp/?p=94</guid>
		<description><![CDATA[初めて触ったのはPHP5だった。 自分が慣れていないだけなのだろうが、 PHP4でMYSQLを操作するときの感覚がつかみづらい。 mysql_connect関数によく触りもせずにPDOを使っちゃったし・・・ 順序が逆になると後で大変だよ、という悪い例ですね。 クラスも微妙に違ってるからなのか、 PHP5で動くのにPHP4で動かないこともしょっちゅう。 会社の前任の方はPHP4がメインだったようで、 引き継いだ案件の拡張なんかが結構とまどう。 これも経験ですよね。。]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>初めて触ったのはPHP5だった。</p>
<p>自分が慣れていないだけなのだろうが、<br />
PHP4でMYSQLを操作するときの感覚がつかみづらい。<br />
mysql_connect関数によく触りもせずにPDOを使っちゃったし・・・</p>
<p>順序が逆になると後で大変だよ、という悪い例ですね。</p>
<p>クラスも微妙に違ってるからなのか、<br />
PHP5で動くのにPHP4で動かないこともしょっちゅう。</p>
<p>会社の前任の方はPHP4がメインだったようで、<br />
引き継いだ案件の拡張なんかが結構とまどう。</p>
<p>これも経験ですよね。。</p>
<div class="shr-publisher-94"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://ken.quoit.jp/2009/09/08/php4%e3%81%a8mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

