本番環境にZend FrameworkをつかったPHPスクリプトをアップし、動作環境を整えた。
集計ものは何の問題もなく動作した。完璧か?と思った矢先、登録がまったく動かなかった。
フレームワークライブラリ本体のスタックトレースが出てしまい、とても追えず、意味も分からず、当然、スタックトレースではエラーメッセージと異なりネット検索してもたかが知れている。
地味にviewにvar_dumpを入れるなどして、地味〜にデバッグすると、INSERT文に渡しているパラメータがすべて(GETで渡している一つを除く)がNULLになっていた。
$_POSTスーパーグローバル変数をvar_dumpしてみると中身はきちんとしているので、Javaの送信側は問題なさそうだ。
理由は、配列パラメータの扱いだった。
同時に複数曲のデータを送信する場合がある(iPod同期のタイミング、アニメタルマラソンのような短い曲を連続した場合など)ので、曲名やアーティスト名は配列で渡している。
それを、プリペアードステートメントにbindValueしていたのだが、その方法が悪かった。
$_POSTだから、Zend Frameworkでは、getPostで得ることになる。それの記述を、
getPost(“title[$i]”)
などとやっていたので、NULLになってしまっていた。
ループに入る前に、
$key_values = getPost(“values”); // valuesは配列
として、bindValueのパラメータには、$key_values[$i]などとすることで動作させることができた。
詳しい人や慣れた人がどう処理しているのかも知りたいが、ともかく、問題を一つクリアできたので、Kung-Tunesは御役御免となり(iTunesと起動・終了を強制的に同期を取るのが気に入らなかったのもある)、自作アプリで自宅サーバのDBにデータを蓄積することになる。
一歩進んだが、ここで止まらないように作りつづけよう。
コメント