【CakePHP】OracleのODBCドライバでtimestamp型でハマったこと
-
カテゴリ:
- PHP
cakephpのログイン認証ではまったことをメモ。
cakephp1.3で起きた事象なので古すぎて需要は少ないかもしれませんが、
自分みたく昔からのシステムを保守している人に向けて記載します。
事象
linuxの開発環境では正常にログイン可能なのに、Windowsのローカル環境を構築してみたらどうしてもログインできない事象が発生。
各システムのバージョンは以下の通りです。
バージョン関連
- CakePHP 1.3.14
- XAMPP 1.7.3
Apache 2.2.14
PHP 5.3.1 - Oracle
上記の内容をローカル上で構築し、DBへは開発環境のoracleに接続する仕組みで設定しました。
しかしログインの画面は開きますが、どうしても認証が通ってくれません。
ログの内容やCakePHPのコアプログラムをいろいろ掘り下げてみると、
どうやら認証処理で使ってる日付の型変換で落ちているが分かりました。
oracleのエラーで「ORA-01843: not a valid month」と見慣れないエラーが
出ています。
直訳すると「指定した月は無効です」ということらしいですが、SQLを出力してみてもちゃんと日付は設定されています。
さらに調査した結果以下の記事を見つけました。
https://docs.microsoft.com/ja-jp/sql/odbc/microsoft/setting-the-date-format-on-connection?view=sql-server-2017どうやらWindowsのOracle用ODBCドライバは、timestamp型を自動で変換してくれないみたいです^^;。
普段MySQLを使い慣れているせいか、型変換もやってくれると思っていました。
結局timestamp型で設定しているカラムに対し、文字列の日付を当てに行ってエラーになってみたいです。
現状の解決策としては、テーブルのカラムをDate型に変えることが一番賢明でしょうか。でも、それは影響範囲がデカそうで大変です><;。