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

2012年12月13日木曜日

Zend Frameworkでつくるソーシャルゲーム 第4回 Zend_Application_Resource_Db

毎度どうも佐藤です。

Zend Frameworkでつくるソーシャルゲーム第4回まできました。

ブログで書いたシリーズ物では最長ではないでしょうか(爆)

今回はZend FrameworkからDBを利用できるようにします。
ここみたら終わりますが→利用できるリソース-Zend Manual
それはそれという事にして始めましょうか。

まずは設定ファイルをiniからymlに変更します。

(個人的にiniよりymlが好きなので)

NetBeansから編集していきますよ!

iniをいじる前にindex.phpを変更します。(別にどっちからでもいいんですが)

23行目あたりのZend_Applicationをインスタンス化しているところにiniファイルを指定しているところがあるのでそこをymlに変えます。
//public/index.php
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.yml'
);


index.phpはこれで終わりです。CTRL+Sで保存しておきましょう。

次は「application/configs/application.ini」を編集します。

まずはapplication.iniを右クリックして拡張子をymlに変更します。

それから当然中身も書き換えなければならないのでyml風に書き換えます。
CTRL+Hとかうまく使ってささっと書き換えてください。
これを
;application/configs/application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1



こんな感じにします。
#application/configs/application.yml
production:
  phpSettings:
    display_startup_errors: false
    display_errors: false
  includePaths:
    library: APPLICATION_PATH/../library
  bootstrap:
    path: APPLICATION_PATH/Bootstrap.php
    class: "Bootstrap"
  appnamespace: "Application"
  resources:
    frontController:
      controllerDirectory: APPLICATION_PATH/controllers
      params:
        displayExceptions: false

staging:
  _extends: production

testing:
  _extends: production
  phpSettings:
    display_startup_errors: true
    display_errors: true

development:
  _extends: production
  phpSettings:
    display_startup_errors: true
    display_errors: true
  resources:
    frontController:
      params:
        displayExceptions: true



参考
Zend_Config_Yaml

書き換えが正常にできたか確認

これでまずは実行してみてください

余分なスペースとかインデントにタブ使ったりするとエラーがでたりします。
:の前にスペースはいってたらダメで5分ハマリました。
前回と同じくWelcome to the Zend Framework!が見えてればミスはないと思われます。
もしエラーがでてたらZendServerのMonitor→LogsとかからPHPエラーログあたりを見て原因をさぐり修正してください。
多分今のところスペルミスとか、無駄なスペースが・・・とかインデントが・・・とかよくあるケアレスミスだと思います。

DBの設定をymlに記入

表示できたらresourceのところにdbの設定を追記します。
※今動作しているlocalのサーバはこのブログの通りならdevelopmentですが、developmentはproductionの設定を継承しているのでどちらの箇所でも大丈夫です。

resources:
    db:
      adapter: Pdo_Mysql
      params:
        dbname: dragonfantasy
        username: dragon
        password: fantasy
        host: localhost


とかいう具合に。
追記したらまた実行して書き方にミスが無いか確認します。

コントローラからDBを呼び出す

正常なら「application/controllers/IndexController.php」を編集します。
indexAction()でDBからデータを取り出してみます。
public function indexAction()
    {
        $db = $this->getInvokeArg('bootstrap')->getPluginResource('db')->getDbAdapter();
        $db->query('set names utf8');
        $res = $db->fetchRow('select id,name from dfaccount where id=1');
        Zend_Debug::dump($res);
    }


どうでしょうか?DBから正常にデータを取り出せましたか!?
できなかった方は画面やlogファイルに書かれたエラーメッセージを元にがんばってみてください!
最後眠くなって来てたので何か書き間違えたかもしれないけれど・・・(ぇ
何か突っ込みどころがあれば気軽にコメントください。

Zend Frameworkでつくるソーシャルゲーム-第3回 DBの設定

二日目に続きました。おめでとう俺。

Zend Frameworkでつくるソーシャルゲーム

第3回はDBの設定です。


MySQLのユーザの作成とテスト用テーブルの作成までやります。

まずはユーザの作成です。

MySQL Workbenchを起動します。
ZendServerと一緒にMySQLがインストールしてあれば、既にworkbenchの方でコネクションが設定されていると思います。
rootでパスワードなしで接続可能な状態になっているはずです。
ローカルでしか動かしてないうちはあまり問題無いとは思いますが、念のためrootにパスワードを設定し、さらに開発で使うユーザを作成します。
ServerAdministrationからLocal_MySQL_Zendserver51とかそんなのをダブルクリックして接続します。
Users and PrivilegesからAdd Accountでユーザを追加します。
設定例

まずLoginタブ

Login Name:dragon
Limit Connectivity to Hosts Matching:localhost
password:fantasy

次にAdministrative Rolesタブ

DBManagerにチェックいれる
Applyボタンを押して完了

開発用DBの作成

ユーザーの追加が完了したらそのServerAdministrationのタブを閉じて、New Connectionから先ほど作ったユーザーで接続しましょう。
接続したら左上の左から3番目のアイコンをクリックして(Create a new schema in the connected server)開発用のDBを作りましょう。
name:dragonfantasy
collation:utf8-utf8_general_ci
Apply
Apply
Finish!

テーブルの作成

ついでにテスト用にテーブルを作っておきます。
できあがったDBのアイコンをダブルクリックしてTablesのところを右クリック→Create table
table name:dfaccount
collation:utf8-utf8_general_ci
engine:InnoDB
Columns
id int PK NN AI
name varchar(45) NN
という感じで適当に。

テスト用データの挿入

テーブルが作成できたらテーブルを右クリックしてedit table dataからテスト用データをいれておきます。
nameだけいれてapplyすればOKです。
idはAIにチェックを入れ忘れてなければ自動ではいります。

とりあえずMySQL側の準備はこれで完了です。
意外と長くなったので続きは第4回にします。

2012年3月29日木曜日

symfony始めました-schema.ymlの作成

どんなDBを使うかモヤモヤと考える。
じゃあMySQLでテーブルはこんな感じかなっとノートにでも書きながら想像する。(省略可)
shema.ymlを書く。
書き方はこの辺を参考に。
Practical symfony 3日目: データモデル
The symfony and Doctrine book
INTの種類の指定の仕方
下記のようなコマンドを打って、うはーすげーな便利だなーと感動する。
php symfony doctrine:build --model
php symfony doctrine:build --sql
php symfony doctrine:insert-sql


タイムゾーンがどうとかいわれたらphp.iniにタイムゾーン設定してあるか確認する。
(してなかったので設定した date.timezone = Asia/Tokyo)

そして3番目(テーブルを実際に作成するコマンド)でハマる。
Couldn't locate driver named mysql
とか言われる。

こちらで言われている通り、確認してみる。
そういえばこれsymfony導入時にもやったじゃんと思いつつ。
・・・モジュール版(?)とCLI版で結果違う・・・?
下記コマンドでphpinfoが見れますよ。
php -i
/usr/bin/php -i
/usr/local/bin/php -i

結論から言えばCLI版のphp.iniにextension=pdo_mysql.soを書き足せばよかったってっ事。
Scan this dir for additional .ini files = (none)
って感じでCLI版はnoneになっちゃってるのが混乱の元だったんだ。

もともと以前確認した時モジュール版はOKだったはず
今思えばこの時も本当はさほど問題なかったんじゃないかと思う。

pecl install pdo-mysql とかpecl install pdo とかやっちゃったけど
これがまたまずかったらしい。
これのせいでモジュール版のPDOからもmysqlが消える。
今は標準でPHPにバンドルされていて、設定を書き換えれば済むところ、古いもので上書きした感じになったようだ?

色々嵌りに嵌ってぐるぐるぐると回りまわって
最終的にこちらで納得して解決。

2011年9月24日土曜日

ソーシャルゲームの作り方 その4? DjangoでDeprecationWarningが出る件

Djangoでrunserverやsyncdbした時になにやらWarningとか出てるのが気になった /usr/lib/python2.4/site-packages/django/db/__init__.py:60:
DeprecationWarning: Short names for ENGINE in database configurations are deprecated.
Prepend default.ENGINE with 'django.db.backends.'
ぐぐって見たけど英語ばかりでした。
仕方ないのでまず翻訳してみたら、翻訳するまでも無かったことに気づくw

ENGINEにdjango.db.backends.もつけろって言ってるだけでした。 [hogehoge@lffoog lffoog]$ vi settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
つけたら消えましたとさ。