• 締切済み

PHP+SQLiteでmax(id)が使えない?

PHPから「select max(id) from table」で「idで最大」が得られていないようで困っています。 一応、sqlite3で同じコマンドを叩いた場合ひ期待した値は帰ってきますが、上記のPHPのコマンドではサイズが0のオブジェクトが返って来ます。 また、このコマンドは「一番新しく追加された項目のidを求める」為に必要なのですが、もしmax(id)を使用しない方法をご存知であれば御教示下さい。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

そのIDがINTEGER PRIMARY KEYということなら、last_insert_rowid()でいいのでは? http://www.dbonline.jp/sqlite/function/index24.html http://www.dbonline.jp/sqlite/table/index8.html

noname#244856
noname#244856
回答No.1

ちゃんと以下のコードで取得できていますが… <?php try { $pdo = new PDO('sqlite::memory:'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("CREATE TABLE test(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"); $pdo->exec("INSERT INTO test(name) VALUES ('foo')"); $pdo->exec("INSERT INTO test(name) VALUES ('bar')"); $pdo->exec("INSERT INTO test(name) VALUES ('baz')"); var_dump($pdo->query("SELECT max(id) FROM test")->fetchColumn()); } catch (PDOException $e) { var_dump($e->getMessage()); }

関連するQ&A

  • PHPで、配列に値をうまく入れれません。

    PHP初心者です。 PHP、Mysqlを使い、検索サイトを作ろうとしています。 チェックボックスでチェックされた値を、一覧.phpに送り、 if(チェックされた値) { $sql1 = select * from table where like '%検索%'; } $sql1の結果を配列に入れて、そのidで以下のように絞込をしたいのですが・・・ $sql2 = select * from table id = $sql1(ここで例えば2,5,7とかって入ってほしい); ググってfetchやらなんやら試したのですが、2,5,7がはいってたとしたら、最後の7だけしか取り出せなかったりと苦戦しています。 よろしくお願いします。

    • ベストアンサー
    • 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
  • select max~の値の取得方法

    select Max(x) from table where y=1 基本的なことかもしれませんが、上のようなクエリを実行したときの値の取得の仕方を教えてください。 単純に query="select Max(x) from table where y=1" a=Execute query としたら「ステートメントの末尾が不正です。」というエラーが出ました。

  • SQLiteでソートした結果をファイルに反映させたい

    あるソフトのデータがSQLiteの形式だと分かり、SQLiteのソフトで開きました。特定のID以外の項目を: DELETE FROM outbox WHERE user_id <> 7777777; で、消し、 SELECT * FROM outbox ORDER BY date_time; でソートしました。しかし、DELETEの方はファイルに反映されたのに、 SELECTの方は、ファイルに反映されません。 SQLite Database Browserというソフトを使っています。 何も分からない状態からここまで来たのです。 あと少しなので、よろしくお願い致します。

  • 一定以上の行があれば最大値を持つ行を削除するSQL

    MySQL5にて、あるテーブルの特定フィールドの数(つまりcount値)が一定値以上であれば、間引きのため別のフィールドの値で最大値をもつ行を削除するSQLを考案中です。 イメージとしては以下の通りですが、SQLとしては誤っており、また、冗長です。 DELETE FROM table WHERE id={$id} AND (SELECT COUNT(*) FROM table WHERE id={$id}) > 5 AND begin = (SELECT MAX(begin) FROM table WHERE id={$id}); よい知恵をお授けください。

    • ベストアンサー
    • MySQL
  • HP上からのPHPによるSQLiteの読み込み

    表題のとおり、PHPでsqliteのDBにアクセスして、表示しようと考えています。 サーバーに以下の内容を書いた、result.phpというファイルを置いて、ページを開きました。 <html> <body> <h3>テスト</h3> <?php try{ $db = new SQLite3('sqlit.db'); $result = sqlite_query($db, "SELECT * FROM table"); $db->close(); } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; } ?> </body> </html> すると、以下のエラーが出ました。 Warning: sqlite_query() expects parameter 1 to be resource, object given in /home/(ファイル置いてある場所)/result.php on line 7 sqlit.dbは適当に作ったファイルで中身はどうでもいいのですが、 エラー内容で検索したところ、一つ目の引数のdb形が違うよーみたいな意味のようですが、解決策がわかりません。 ためしにsqlit.dbを適当な名前にしたところ、その適当な名前のファイルの名前は出てきましたが、 エラー内容は同じでした。 つまり、new SQLite3は実行できている=PHPでSQLのファイルの作成、読み込みは出来ている。 しかし、テーブル名が違うとかといった内容ではなく、型が違う、といわれ困っています。 同じ階層に置いた「php.ini」に以下の3行を記載し、配置してあります。 extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension=php_pdo.dll しばらく調べたのですが、phpそのものが実行されないとか、dbファイルがないといった状況なら調べられそうではあるのですが、実行は出来たけど読み込もうとするとエラーになる。 といわれ調べても情報が出てこず困っています。 何かエラーの可能性になる部分や、調べ方がありましたら教えてください。 ちなみにファイルを置いてあるのはさくらインターネットのサーバーでして、 PHPの設定は「PHP 5.3.8 (CGI版) 」にしてあります。

    • 締切済み
    • PHP
  • sqlite select 表示されない

    原因が分からず困っております。 SQLITEで SELECT * from zip limit 5; だと表示されるのですが SELECT zip7 from zip limit 5; のようにcolumnを指定すると表示されません。 エラーも出ないし空白が5行出ているので、プログラム自体は動いているようなのですが・・・。 ※SELECT zip6 from zip limit 5; のように存在しないcolumnを指定するときっちりエラーが出ています。 環境はCENTOS+SQLITE2+poderosa コマンドラインで実行しています。 宜しくお願いします。

  • SQLiteでのDateTimeの扱い

    SQLiteのデータベースにphpで値を保存したいのですが、カラムのタイプがdatetimeだと上手くいきません。 現在の時刻をSQLiteに書き込むということをしたいです。 カラムのタイプをdatetimeからtextに変更するのは避けたいので、下のphpを変更して書き込めるようにするにはどうすれば良いのでしょうか? 詳しい方よろしくお願いします。 SQLite DB ---- CREATE TABLE "dt" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"REGIST" DATETIME) ---- PHP ---- $sqlite = 'SQLiteへのパス'; $db = new PDO($sqlite); $now = date('Y-m-d H:i:s'); $nfe = $db->prepare('insert into dt(REGIST) values(?)'); $nfe->execute(array($now)); ----

  • 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で作ったのが原因っぽいんですがなにか ご存知でしたら教えていただけませんか。

  • phpでmysqlを使ってデータベース内の最大値の取得

    PHPでMYSQL内テーブル(hogehoge)の「no」フィールドの最大値を取得をしたいのですが、ほしい結果が得られません。 【PHP】 -------------------------------------------------------------- $my_Max = "select max(no) from hogehoge"; $kekka_max = mysql_query($my_Max); -------------------------------------------------------------- no→今回最大値を取得したい項目(int) 【結果】 これをechoで出力すると、 ----------------------------- Resource id #4 ----------------------------- となってしまいます。 「no」の中の最大値を取得したいのですが、どうしたらよいでしょうか? 【環境】 WindowsXP mysql:5.0.51 php:5.2.5

    • ベストアンサー
    • PHP

専門家に質問してみよう