• ベストアンサー
  • 困ってます

SQLite 3.7.1 のタイムゾーンについて

Windows XP に XAMPP をインストールし、PHPとSQLiteでページを作成しているのですが、 SQLite のタイムゾーンの取り扱いで不可解な点があるのでお教え願います。 「UPDATE xxx SET AA='AA', UDate='2010-11-21 19:15:10' WHERE ID= '321'」というSQLを実行すると、SQLiteには UDate がタイムゾーン分の時間が遅れて記録されます。 当然「UDate='2010-11-21 19:15:10'」は、SQL実行時の時間です。 SQLiteの確認は、firefoxのツール・SQLite Manager v0.65 です。 Windows XPのタイムゾーンはJST-9で合っているし、時計の時間は合っています。 PHP には「 date_default_timezone_set( 'Asia/Tokyo' ); 」を記述しているので間違いはないと思います。 実は「UPDATE xxx SET AA='AA', UDate=CURRENT_TIMESTAMP WHERE ID= '321'」を実行した時に、同じように時間がずれたので「CURRENT_TIMESTAMP」が理由だと思い PHP でタイムスタンプを作ってSQLを実行しても同じようにずれたの SQLite の仕様なのかな? と思っていますが、気持ちが悪いので正しく入力できる方法があれば直したいと思っています。 宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数473
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1

時刻関係のdefaultは、GMTを返すようです。 フォーマット関数で localtime を指定すれば、サーバーOS設定の現地時間になります。 select strftime("%Y-%m-%d %H:%M:%S",CURRENT_TIMESTAMP, 'localtime') http://opengroup.org/onlinepubs/007908799/xsh/strftime.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>時刻関係のdefaultは、GMTを返すようです。 御回答ありがとうございます。 御回答頂き、調べ直してみると御指摘のように「localtime」という記述が抜けているようです。 プログラムを訂正して確認してみます m(_ _)m

質問者からの補足

ご回答頂いたように「UPDATE xxx SET AA='AA', UDate=CURRENT_TIMESTAMP WHERE ID= '321'」を下記のように書き換えて無事に時計と同じ時間でdbに記録されるようになりました。 >UPDATE xxx SET AA='AA', UDate=datetime( 'now', 'localtime' ) WHERE ID= '321' ご指摘頂いたように「localtime」の不足でした。 ありがとうございます。

関連するQ&A

  • SQLiteのUPDATE文を教えてください。

    UPDATE tableA, tableB SET tableA.name = tableB.name WHERE tableA.id = tableB.id; 上記のSQLが他のデータベースでは動きますが、SQLiteでは動きません。 同意味のSQLはどう書くのでしょうか。お願いします。

  • Mysqlのupdate文

    Mysql3.23.42+PHPで下記のようなテーブルで Field| Type ----+------------  a | int  b | varchar  c | varchar  d | timestamp  e | timestamp update文を実行すると、 例  update set b='あ',c='い',e=NULL where a='1'; dまでアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか?

  • sqliteでWHERE句に存在しないデータを削除

    PHPのsqliteで $sql=DELETE FROM TABLE WHERE C=データ $db->exec($sql) を使ったところ、WHERE句に存在しないデータがあると、エラーとなります。 sqliteで存在しなくてもエラーとならないような処理はどのようにしたらいいでしょうか?

その他の回答 (1)

  • 回答No.2

No1回答したものです。 参考サイトurlを間違えました済みません、SQLite構文解説はこっちです。 http://www.sqlite.org/lang_datefunc.html

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • accessで2フィールドの置換

    以下の方法ではSQLが2回実行されています。1回でできるSQLを教えてください。 a b 1 1 2 1 1 2 2 2 update t set a=3 where a=1; update t set b=3 where b=1; a b 3 3 2 3 3 2 2 2

  • 複数のUPDATE文の実行

    EXCELでUPDATE文を1000行ほど作成して、MySQL QueryBrowser のSQL QueryAreaに貼り付けて一気にUPDATEしたいのですが可能でしょうか? 現在 UPDATE prod Set p_id=239 Where prod_id = 34421; UPDATE prod Set p_id=139 Where prod_id = 34425; UPDATE prod Set p_id=15 Where prod_id = 34428; (と以上の様な内容が1000行ほどあります。) 貼り付けて、1行づつ選択して、Execute ボタンをクリックして実行しています。 初心者の質問かと思いますがどうぞご教授ください。

  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • sqlite_open()なんですが

    PHPで <?php $db=sqlite_open("rensyuu.sqlite",0666,$err); $row=sqlite_query($db,"select count(*) from sqlite_master where name='tb1';"); $kotae=sqlite_fetch_single($row); print($kotae); sqlite_close($db); ?> と打ったものを実行したら、 Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database in.... というエラーになりました。 どうもsqlite3で作ったのが原因っぽいんですがなにか ご存知でしたら教えていただけませんか。

  • 1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

    1テーブル&複数レコードの更新に対して1度のupdate文での処理方法 Delphi2010+SQL SERVER 2005で開発しています。 update文で、 現在下のようにwhileで複数レコードに対して、 1回、1回、sqlを発行して、更新しています。 これを、一度のSQLの発行で処理できないものでしょうか? 更新テーブルは1つで、更新する項目も同じです。 更新するデータと、where句の条件が異なります。 もし可能なようでしたら、どうかご教授お願いします。 update table set A=1,B=2 where id=1 update table set A=2,B=3 where id=5 update table set A=9,B=99 where id=7 update table set A=5,B=10 where id=15 update table set A=1,B=10 where id=75

  • mysqlのupdateはどこでやるのですか?

    ものすごい愚問だったらすみません。 mysqlのデータをupdateするのはどこでするのですか? 今はhp上に xxx.phpをつくり、phpで今日の日付を取得し、複数のmysqlテーブルから条件抽出selectし、、、と値を出し、xxx.phpで $sql_l = "UPDATE table名 SET tyo{$month} = '{$ticket_city_month[price]}' WHERE cityname = '{$cityname}'"; $result = mysql_query($sql_l); とし、ブラウザ上から更新して、updateしています。 一応UPDATEはできているのですが、数が多く一気にできません。 (select時にデータ量を少なくするため、あえてwhereで一部ずづやってます。) phpMyAdmin 2.6.0 MySQL 4.1.20 で、 phpMyAdminとNavicat MySQLも利用しています。

  • レコード新規・編集時に自動で作成・編集日時を追加

    MYSQLにて(PHPMYADMIN上でテスト) ●レコード挿入(追加・新規作成)時は、 「Pt_create」と「Pt_update」の2つのフィールドに自動で現在時刻を作成 ●レコード編集時は 「Pt_update」のみ自動で現在時刻を上書き というありがちで申し訳ないですが、実行したいです。 現在調べたところ、 一番スマートでない方法は、 ******************************* Pt_createのほうに、種別:DATETIME Pt_updateのほうに、種別:DATETIME PHP側にて、$today = date("Y-m-d H:i:s");を取得して、 新規作成時・・・ $sql = INSERT INTO (`Pt_create`,`Pt_update`) VALUES ('".$today."','".$today."')・・ 編集時・・・ $sql = UPDATE SET Pt_update= '".$today."'・・ ******************************* ですよね? できたらSQLのほうで自動でやれるだけやってほしいのですが、 今は、 ******************************* Pt_createのほうに、種別:DATETIME Pt_updateのほうに、種別:TIMESTAMP、属性:on update CURRENT_TIMESTAMP PHP側にて、$today = date("Y-m-d H:i:s");を取得して、 新規作成時・・・ $sql = INSERT INTO (`Pt_create`) VALUES ('".$today."')・・ ******************************* ここまで省略できました。 これが限界でしょうか。 種別:TIMESTAMPを2つ設置したらうまく動作しなかったもので。

    • ベストアンサー
    • MySQL
  • MySQL UPDATE SETが失敗なのに1が返る

    MySQL UPDATE SETが失敗なのに1が返る いつもお世話になります。 MySQL5.0 PHP5 PEAR(DB)にて開発中です。 "UPDATE master SET xxx={$xxx}+1 WHERE id={$id} AND xxx={$xxx}" 上記クエリを実行し、 WHERE以下に該当しないない場合は、該当データー無しとして別の処理を行う予定です。 該当すればそのままUPDATEでいいのですが、 ここで該当無しとなれば、通常UPDATEの場合は返り値として0が戻るはずなのでが、 どうしても1が戻ってしまいます。 その為、if($res==0) として判定できず困っております。 ※もちろん、該当無しのUPDATEの場合は、テーブル内のデーターは変更されていません。 どなたか回答をお寄せ下さい。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • データベースで値をインクリメントする方法

    このジャンルでお願いします。 例えばあるカラムをインクリメントする場合に MySQLだと UPDATE mytable SET col=col+1 WHERE id=1; というSQL文でできますが、 一方でプログラム(PHPなど)側で一旦その行を取り出して $id = 1; $col += 1; UPDATE mytable SET col={$col} WHERE id={$id}; というやり方もあると思います。 どちらが良いとか悪い(?)とかあるのでしょうか? 実際にみなさんはどちらのやり方でやっているのでしょうか?またできれば理由もお願いします。 というのも、PHPなどのフレームワークでは値をインクリメントしたい場合は ほとんどが後者のやり方になると思います。 自分的には前者のSQL文でやった方がなんとく良いのでは?と思ってるのですが、 フレームワークなどを使って更新処理を行うと後者のやり方になってしまうので

    • ベストアンサー
    • PHP
  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP