Wednesday, 25 January 2012

[PHP][MySQL]レコードの作成時間と更新時間の型とか

どうしようか悩んだので。
今回は、型の選択と、結論TIMESTAMP選びましたの場合の注意点をメモ


1,型の選択


型の選択肢は
・TIMESTAMP型
・DATETIME型
・INT型(UNIXTIMESTAMP)


型の選択で考えた要素は、
・プログラムの時のめんどくささ
 TIMESTAMPはON UPDATE CURRENT TIMESTAMPで自動更新してくれる!他は一緒!


・クエリの実行速度
 MySQLでDATETIME型のデータを高速に検索する方法 | 深追い Fukaoi.org 
 INTだと早いという話
 MySQL5.5.3-m3のDATETIME型のバグ。あとMySQLのDATETIME型は本当に遅いのか検証してみた
  INDEXすればどれも変わらないよという話


 上記を参考に、特に気にしないことにした。将来まじめに作るときはベンチマークとかしないと。


・データ解析時のめんどくささ
 UNIXTIMEはマジで視認性が悪い。条件でしぼるとき本当にストレス。
 毎回FROM_UNIXTIMEって付けてました。


・その他安定感
 TIMESTAMP型とDATETIME型
 TIMESTAMPには2037年問題があるらしい。


というわけで、気張らず使うときはTIMESTAMP、真面目に作るときはちゃんベンチとかしたうえでDATETIME使うと思う。多分。




2、TIMESTAMPの注意点


TIMESTAMP型には、初期値と自動更新属性を付与できるのですが、下記点に注意です。


・(ON UPDATE or DEFAULTの)CURENT_TIMESTAMPは1テーブル1個しか使えない
・テーブル内先頭のTIMESTAMP型カラムには、デフォルトで「DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」属性が付与される


例えばテーブル内にカラムの作成時間と更新時間を入れたいときは
   CREATE TABLE IF NOT EXISTS bbs_topics(
   ・
   created timestamp DEFAULT 0,
   updated timestamp DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP,
   ・

こんな感じにして、CREATE時にはプログラムの方で時間を挿入してやる必要があるみたいです(NULLを送ればCURRENT_TIMEが入る)。これはめんどくさい…


上のでcreatedの「DEFAULT 0」を抜くと、自動付与されたCURRENT_TIMESTAMP属性と、updatedのCURRENT_TIMESTAMP属性がかぶって、エラーになります
createdにDEFAULT CURRENT_TIMESTAMPを入れても当然エラーだけどしょうがないのかな

[PHP][SQL]SQLのデバッグ

INSERT文がうまくいかなくて詰まったので、SQLのデバッグとか結果確認についてメモ

1,SQL本文を表示する
print_r($sql);

2,mysqlエラーを表示する
$result = mysql_query($sql) or die(mysql_error());

3,(INSERT時)挿入されたレコードのAUTO INCREMENTされたidを取得して表示する
echo mysql_insert_id($link);


ちなみに問題の原因はユーザー名を間違えて
DB接続から失敗してましたとさ、ちゃんちゃん。

Monday, 23 January 2012

terminalでmysqlにログイン

前方法がわからなかったmysqlへのログイン方法見っけたのでメモ

mysqlにログイン 
$ /usr/local/mysql/bin/mysql -u root -p 

XAMPPをぶん投げて、自分で1から環境構築はやめた

しようとしましたが、ちょっとエラーが起きて、
試行錯誤の過程でぶん投げたきっかけも解消されたのであきらめました。
環境はMac OS X10.6.8 SnowLeopardです

一応調べたことの備忘録

▼前提とやったことの全体像
1,前提
2,apacheの動作確認とphpの動作設定
3,ドキュメントルートの変更
4,MySQLとPHPmyadmin


1,前提
今回作成する環境は、Apache、php、MySQL+phpmyadmin
SnowLeopardにはApacheとphpがデフォルトでインストール済み

2,apacheの動作確認とphpの動作設定
Sustem Preference>Sharing から Web Sharingをonにする。これでApacheが起動。
→ブラウザからhttp//:localhostにアクセスで「It works!」と表示される

さらにphpを使用するために
sudo vim /private/etc/apache2/httpd.conf  vimでhttpd.conf を開く
#LoadModule php_5module     libexec/apache2/libphp5.so のコメントを外す(#を外す)
sudo /usr/sbin/apachectl restart Apacheを再起動

これでphpが使えるようになるはず


3,ドキュメントルートの変更
sudo vim /private/etc/apache2/httpd.conf  vimでhttpd.conf を開く
DocumentRoot "/library/~~~~~~" を変更

4,
こっからやらず…

参考URL

Friday, 9 December 2011

[2002] No such file or directory - Mac/XAMPPでMysql接続エラー

XAMPP for MacでMySQLに接続できないエラーが起きたのでメモ

この何の変哲もないコードで
        if( !$conn = mysql_connect( $host, $user, $pass ) )

出たエラーはこれ

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)

結論から言うと、ホスト名($host)を localhost → 127.0.0.1 に変更で解決しました。
Mysqlは localhostと指定すると unix domain socketを使うのですが、
IPで指定することで TCP socket を使わせることができるのだそうです。

windows版XAMPPでは問題が起きなかったため、それなりにとまどいました。

さらに時間をくわせたのが、上記エラーをググって出てきた、
cakephpのbakeする時?とかに発生するらしい
mysql.sockのパスの変更による解決。せっかくなのでメモ

php.iniで指定したパスと実際に見ているところが違う場合に同様の エラーが起こるらしい

解決法は以下らしい
1 - php.iniのパス変更 参考記事
2 - シンボリックリンクの作成  参考記事
3 - my.cnfの設定変更 参考記事

ちなみに phpinfo() でphp.iniの場所と、見てるmysql.sock の場所が確認できます

※因果関係は不明ながら、この後mysqlが起動しなくなる事象が発生
別のmysqlが起動してますみたいなメッセージ出てた。で、状態としては、
・ブラウザ上でphpファイルは普通にmysqlにつないで情報読み込めてる
・phpmyadminのそのページで使用しているテーブルを読み込もうとするときのみ 2002 エラーが発生
・phpmyadminでその他のテーブルは普通に見れる
てな感じでした。ググって出てくるmysql起動しないも当てはまらないし、一旦放置

Monday, 5 December 2011

ファイルパーミッションの概要、変更方法等まとめ

Macを使うようになってから、ファイルパーミッションの問題でつまずくことがでてきた。
-外付けハードディスクにファイルをコピーできない
-新しいフォルダが作れなくなる
-OpenPNEのインストールに失敗する
といった問題が発生した。

そこで個別の対処法をぐぐるだけでなく、
一旦ファイルパーミッションについて整理することにした。

▼パーミッションの概要
各ファイルに対し、誰がどんな操作が可能かを設定するもの。
全ファイルとかディレクトリごとに設定されている。

▼パーミッションの分類、表記
UNIX系システムにおいては、
各ファイルに「3タイプのクラス」ごとに「3種類の権限」を設定する。

-クラス クラスとはOSで設定するものでアクセス経路とかは関係ない 
owner ファイルの所有者。初期はそのファイルを設置したアカウント
group 所属グループ。初期はそのマシン内のアカウント
others 上記をのぞくユーザー

-タイプ 3種類。他にも種類もあるが、いったん省く
read 読み込みファイルを読む権限
write ファイルに書き込む権限。ディレクトリならフォルダ作るとか
execute ファイルを実行する権限。ディレクトリなら中に入る

-表記
例 -rwxrwxrwx
文字表記。クラスとライプの組み合わせごとに位置が決まっている
1番左はファイルの種類とか -はファイル dはディレクトリ
2-4、5-7、9-10はそれぞれ、owner,group,others

例 755
数字表記。左からowner,group,othersで、r=4、w=2、x=1で足す。

▼パーミッションの確認方法
-FTPクライアントで見る
- ls -l で見る

▼パーミッションの変更方法
-FTPクライアントで変更する
- chmod 変更内容 ファイル名 で変更

Saturday, 3 December 2011

ポートの問題でXAMPPのApacheが起動しない時の対処

シンプルに対処だけじゃないところが素敵でした

・エラーメッセージを見てみる
・ポートの占有状況、占有プロセスを確認する
という形での対処です

XAMPPでApachが起動しない場合のわりと汎用的な調査・解決方法まとめ