質問: $db->prepare('update T_TASK set TASK_TYPE =:type, TITLE =:title, LIMIT_DATE =:limit_date, TASK_STATUS =:status, KOUSHIN_DT =:koushin_dt where USER_ID =:user_id;'); $wkPlaseHolderQuery->bindParam(':type', $param_task_type, PDO::PARAM_STR, 80); $wkPlaseHolderQuery->bindParam(':title', $param_title, PDO::PARAM_STR, 300); $wkPlaseHolderQuery->bindParam(':limit_date', $param_limit_date, PDO::PARAM_STR, 10); $wkPlaseHolderQuery->bindParam(':status', $param_task_status, PDO::PARAM_STR, 1); $wkPlaseHolderQuery->bindParam(':koushin_dt', $sys_date, PDO::PARAM_STR, 19); $wkPlaseHolderQuery->bindParam(':user_id', $param_user_id, PDO::PARAM_INT); // ★A ここまでは来る $wkPlaseHolderQuery->execute(); // ★B ここにも来る // コミット $db->commit(); // ★C ここにも来る }catch(Exception $param_rollback_ex){ // ロールバック $db->rollBack(); throw new Exception(); } }catch(Exception $param_ex){ print '【システムエラー】'; } } ``` (1)引数に値が入ってきて、 (2)UPDATE文を作成し (3)実行し、コミットする という流れの関数で、★ABCのいずれにも来ている事は確認できているのですが、 実データがUPDATEされていません。 何が悪さをしているのか、コードを書き換えて試してもみましたが、 解決出来ず困っています。 何が原因か心当たりのある方がいれば、ご教示頂ければ幸いでございます。 ### 【前提条件】 * テーブル名、およびカラム名は間違えていません。(名前は仮のものです) * dbAccessSetupクラスでは正常にDB接続が行われています。 * 引数には全て、必ず値が入ります。 * PHP5.3を使用。 * MySQLを使用。 ### 実現したいこと UPDATEを実データに反映させたい。 以上、何卒宜しくお願いいたします。 ### 修正依頼に対する追記 * PHPバージョン 3.5→ 5.3の誤りでした。大変失礼致しました。 * コードを修正いたしました。Exceptionにて、 ``` }catch(Exception $param_ex){ print '【システムエラー】' . $param_ex->getMessage(); exit; } ``` と改めましたが、例外処理ではキャッチできていないようです。
回答: 学習目的なのであれば、MySQL 側にクエリーログを取るように仕込むと、原因が確認しやすいです。 ↓らへんが怪しい気がする。 `$wkPlaseHolderQuery->bindParam(':user_id', $param_user_id, PDO::PARAM_INT);` キャストが必要とかそんなやつじゃないかなぁ。。。 参考:PHPでデータベースに接続するときのまとめ