ZendFrameworkで誕生日データを元に年齢を更新する方法は?

このQ&Aのポイント
  • ZendFrameworkで、誕生日のデータを元に年齢を更新する処理を実行していますが、更新がうまくできません。該当するプレイヤーテーブルのnenreiフィールドに現在の年齢を設定したいのですが、実行結果が0件となってしまいます。
  • phpPgAdminで直接SQL文を実行すると正しく更新されるため、ソースコードに問題がある可能性があります。
  • ソースコードの問題点として、prepareメソッドを使用しているが、executeメソッドを呼び出していないことが考えられます。適切にexecuteメソッドを呼び出すことで、更新処理が正しく実行される可能性があります。
回答を見る
  • ベストアンサー

zendframework

以下のテーブルの誕生日のデータを元にnenreiフィールドへ現時点の年齢を更新することをしたいのですが、 (phpでPostgreSQLを使用、フレームワークはZendFramework) 【player_tbl】 id     ID name   名前 birthday 誕生日(19950203のような形式でデータが入っています) nenrei  計算された年齢を入れる phpPgAdminで以下のSQL文を直接実行すると、問題なく更新されるのですが UPDATE player_tbl SET nenrei = extract(year from age(current_date, to_date(birthday,'YYYYMMDD') )) ; ZendFrameworkで、以下のソースを実行すると、うまく更新できません。 $this->_db = DbManager::getConnection(); $sql = 'update player_tbl set '; $sql .= "nenrei = extract(year from age(current_date, to_date(birthday, 'YYYYMMDD'))) ;"; $stt = $this->_db->prepare($sql); $num = $stt->rowCount(); $numは0で返ってきて、更新は0件となります。 上記ソースコードは、何か間違っているでしょうか?。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

最後に $stmt->execute() とか必要じゃないですか??

like-linux
質問者

お礼

すいません、確かにそうでした。 ありがとうございました

関連するQ&A

  • 年齢計算

    以下のフィールド構成のテーブルがあるのですが 「birthday」フィールドの値を元に、現時点の年齢を計算して 「nenrei」フィールドに入れたいと考えています。 【player_tbl】 id     ID name   名前 birthday 誕生日(19950203のような形式でデータが入っています) nenrei  計算された年齢を入れる 以下のSQLを実行してもエラーになります。 update player_tbl set nenrei = extract(year from age(current_date, birthday)) ; SQL エラー: ERROR: function age(date, character varying) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts. birthdayのところを工夫しないとダメだということは、なんとなくわかるのですが どのように変更すると実現できるのかわかりません。 age関数の中に、フィールド名を入れたい場合は、どのような記述になるのでしょうか? また、データ数は10万件くらいですが、一気に更新するのは難しいでしょうか? DBはPostgreSQLです。 よろしくお願いいたします。

  • 検索条件の指定方法がわかりません。

    ASP+PostgreSQLで検索画面を作成しています。 テーブルに名前、生年月日しかなく年齢をSQLの中で計算しています。 こんな感じです↓ To_Char(age(current_timestamp, To_date(birthday,'YYYYMMDD')),'yy') As genzai_age 「genzai_age」をwhere句で使用したいのですがas句なので利用できません。 「genzai_age」を検索条件にする何か良い方法はないでしょうか? ご存知の方がいらっしゃいましたら、ご教授願ください。よろしくお願いします。

  • SQL文のAS句の意味を教えて下さい。

    generate_seriesをネットで調べていたら下記のページを見つけ、このページのSQL文を解読していたら一か所、わからないところがあったので質問しました。 下記のSQL文はサイトからコピーしたものです。 SELECT  current_date + s.a AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s(a); 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQL文のAS句を下記のように私が変更してSQL文を実行したら上記の結果と同じ結果を出力しました。 SELECT  current_date + s AS date FROM  generate_series(   (SELECT 0 - extract(dow FROM current_date))::int,   (SELECT 6 - extract(dow FROM current_date))::int  ) AS s; 下記が上記のSQL文を実行した結果です。   date ---------- 2012-02-26 2012-02-27 2012-02-28 2012-02-29 2012-03-01 2012-03-02 2012-03-03 上記のSQLのAS句の「s(a)」はどういう意味ですか? ※AS句は別名を付ける際に使うと思うんですが... すみませんが説明していただけませんでしょうか? 宜しくお願いします。

  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)

  • テーブルの行を増やしたい・・・。

    テーブルの行を増やし、 データを一年文作成したいのですが・・・。 CREATE TABLE CALENDAR_TBL( YYYYMMDD DATE NOT NULL, DayData NUMBER(3) NULL CONSTRAINT CALENDAR_TBL_PKEY PRIMARY KEY(YYYYMMDD)); このテーブルに、2005年のデータ365レコードを挿入したいのですが、 1つのINSERT文(SQL)で、できますでしょうか? (※PL/SQLは除きます。) ※不可能であれば、SELECT文(下記のように)を一年分用意してUNIONで作成するのですが、 これ以外に簡単にできないでしょうか? INSERT INTO CALENDAR_TBL ( (SELECT SYSDATE + 000, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 001, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 002, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 003, DayData FROM CALENDAR_TBL) ・・・(省略)・・・ UNION (SELECT SYSDATE + 365, DayData FROM CALENDAR_TBL) )

  • MYSQLでgroup by を教えてください。

    まだ初心者なんです。よろしくお願いいたします。 テーブル$tbl_nameに日付date コラムに (2009-11-3 14:25:06).(2009-11-3 11:25:06). (2009-11-5 12:25:06).(... ....と年齢 ageコラムに (18)(19)(20)... 性別コラムage に (danshi)(jyoshi) が入っています。 これを日付別 に内容が存在するだけ出力したいのです。 出力内容は(18)→25、(19)→13、(20)→7、の数だけ、 同様に(danshi)→20、(jyoshi)→25、というように 〇月〇日18才は25人、19才は13人、20才は7人、 男子は20人、女子は25人と出したいのです。 $sql = "SELECT 'age',count(age) FROM $tbl_name group by 'date'"; $result = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); while ($row = mysql_fetch_assoc($result)){ $age .=$row;} 等記入しているのですが、何とも動きませんのです。 どうしたらよろしいものでしょう。よろしくお願いいたします。

  • PHPにタイムアップによるエラーはありますか?

    PHPのmysql_query関数にてMySQLに要請すると、例えば200件では結果が返ってくるのに、 5000件ではエラーになります。大したデータ量ではないと思いますが、 タイムアップなどでエラーになる事はありますでしょうか? SQL文 ------------------------------------------------------------- SELECT chart_total, chart_card, chart_date, Sum(chart_total) AS sum_total, Sum(chart_card) AS sum_card FROM chart_table WHERE extract(year from chart_date) = 2007 GROUP BY extract(year_month from chart_date) ORDER BY chart_date ------------------------------------------------------------- Linux 2.6.9-42.ELsmp PHP 4.4.4 MySQL 4.0.27

    • ベストアンサー
    • PHP
  • SQLServerトリガー(データ追加時)

    Microsoft SQL SERVER 2005でデータ更新/追加時に起動するトリガーを 作成したいのですが記述方法がわかりません。 テーブル:TBL_SHOHIN SHOHIN_NAME NVARCHAR(50) /* 商品名 */ SAKUSEI_DATE datetime /* 作成日付 */ KOSHIN_DATE datetime /* 更新日付 */ このTBL_SHOHINテーブルに追加があった時は、作成日付(SAKUSEI_DATE)にシステム日付をセット このTBL_SHOHINテーブルに更新があった時は、更新日付(KOSHIN_DATE)にシステム日付をセット 更新時は下記の記述でうまくいったのですが、追加時をどう記述すればいいの でしょうか? create TRIGGER trgSHOHIN ON TBL_SHOHIN FOR INSERT, UPDATE AS BEGIN UPDATE TBL_SHOHIN SET KOSHIN_DATE = GETDATE() END RETURN

  • VBでSQL文のUPDATE文を使った時のエラー

    access VBA初心者ですが回答、ご指摘のほうよろしければお願いします。 フォームにて更新ボタン押下時、テーブルの更新日付を現在の日付で更新したいと考えております。 下記のようにVBを組み込んだのですが、実行すると「UPDATE ステートメントの構文エラーです」というエラーがでてしまいます。 構文のどこが悪いか御指南いただけないでしょうか。 test_TBLの更新日付のフィールドを現在日付で更新 Dim sql As String Dim newdate As Date newdate = Now() sql = "UPDATE test_TBL SET 更新日付 =#" & newdate & "#" DoCmd.RunSQL sql

  • SQLパズルの欠勤という問題で質問があります。

    SQLパズルの欠勤という問題で質問があります。 社員が1年間(閏年じゃない年)で、罰点を40点以上をためたか チェックをするSQLで、罰点の集計期間1年間の条件が したのようになっているんですが、これだと 集計期間が366日になると思うんですが、これは 本の内容が間違っているということでしょうか? WHERE absent_date BETWEEN CURRENT_TIMESTAMP - INTERVAL '1' YEAR AND CURRENT_TIMESTAMP

専門家に質問してみよう